From 2971ec6cd8f5c27c7267682dd969a1423da22414 Mon Sep 17 00:00:00 2001 From: e5l Date: Tue, 9 Aug 2016 17:01:38 +0300 Subject: [PATCH] translator: print error message --- .../org/kotlinnative/translator/BlockCodegen.kt | 16 ++-------------- .../kotlinnative/translator/TranslationState.kt | 9 ++++++--- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt index e4563b592d8..e6c600d3e76 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt @@ -4,8 +4,6 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.KtNodeTypes -import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -15,7 +13,6 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.callUtil.getValueArgumentsInParentheses import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant -import org.kotlinnative.translator.exceptions.UnimplementedException import org.kotlinnative.translator.llvm.* import org.kotlinnative.translator.llvm.types.* import java.util.* @@ -32,7 +29,6 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM if (isBlock) { expressionWalker(expr, scopeDepth) } else { - var result = evaluateExpression(expr, scopeDepth)!! when (result) { is LLVMVariable -> { @@ -205,7 +201,6 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM return evaluateClassScopedDotExpression(clazz, selectorExpr, scopeDepth) } - private fun evaluateExtensionExpression(receiver: KtExpression, selector: KtCallExpression, scopeDepth: Int): LLVMSingleValue? { val receiverType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, receiver) val standardType = LLVMMapStandardType(receiverType!!.type!!) @@ -221,9 +216,7 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM } val args = mutableListOf(loadArgumentIfRequired(receiverExpression, typeThisArgument)) - args.addAll(loadArgsIfRequired(names, extensionCodegen.args)) - return evaluateFunctionCallExpression(LLVMVariable(extensionCodegen.fullName, extensionCodegen.returnType!!.type, scope = LLVMVariableScope()), args) } @@ -336,7 +329,6 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM return evaluateFunctionCallExpression(LLVMVariable(function, descriptor.returnType!!.type, scope = LLVMVariableScope()), args) } - if (state.classes.containsKey(name)) { val descriptor = state.classes[name] ?: return null val args = loadArgsIfRequired(names, descriptor.constructorFields) @@ -478,9 +470,7 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM private fun evaluatePostfixExpression(expr: KtPostfixExpression, scopeDepth: Int): LLVMSingleValue? { val operator = expr.operationToken - val left = evaluateExpression(expr.baseExpression, scopeDepth) ?: throw UnsupportedOperationException("Wrong binary exception") - return executePostfixExpression(operator, expr.operationReference, left as LLVMVariable) } @@ -579,7 +569,6 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM } } - private fun addPrimitiveBinaryOperation(operator: IElementType, referenceName: KtSimpleNameExpression?, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMVariable { val firstNativeOp = codeBuilder.receiveNativeValue(firstOp) val secondNativeOp = codeBuilder.receiveNativeValue(secondOp) @@ -621,9 +610,7 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM private fun evaluateConstantExpression(expr: KtConstantExpression): LLVMConstant { val expressionKotlinType = state.bindingContext.get(BindingContext.EXPRESSION_TYPE_INFO, expr)!!.type!! val expressionValue = state.bindingContext.get(BindingContext.COMPILE_TIME_VALUE, expr)?.getValue(expressionKotlinType) - val type = LLVMMapStandardType(expressionKotlinType) - return LLVMConstant(expressionValue?.toString() ?: "", type, pointer = 0) } @@ -695,6 +682,7 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM evaluateWhenItem(item, targetExpression, resultVariable, nextLabel, endLabel, item.isElse, scopeDepth + 1) codeBuilder.addComment("end new when item") } + codeBuilder.addComment("else branch of when expression") codeBuilder.markWithLabel(nextLabel) codeBuilder.addUnconditionalJump(endLabel) @@ -758,6 +746,7 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM codeBuilder.storeVariable(resultVariable, thenResultExpression ?: return null) codeBuilder.addUnconditionalJump(endLabel) codeBuilder.markWithLabel(elseLabel) + val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) codeBuilder.storeVariable(resultVariable, elseResultExpression ?: return null) codeBuilder.addUnconditionalJump(endLabel) @@ -815,7 +804,6 @@ abstract class BlockCodegen(open val state: TranslationState, open val variableM reference.pointer += 1 codeBuilder.storeNull(reference) - variableManager.addVariable(identifier, reference, scopeDepth) return null } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt b/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt index 6002af3a2ec..d69693f3a8a 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/TranslationState.kt @@ -3,7 +3,10 @@ package org.kotlinnative.translator import com.intellij.openapi.Disposable import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.messages.* +import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider @@ -37,7 +40,7 @@ class TranslationState(val environment: KotlinCoreEnvironment, val bindingContex fun parseAndAnalyze(sources: List, disposer: Disposable, arm: Boolean = false): TranslationState { val configuration = CompilerConfiguration() - val messageCollector = GroupingMessageCollector(object : MessageCollector { + val messageCollector = object : MessageCollector { private var hasError = false override fun hasErrors(): Boolean = hasError @@ -46,7 +49,7 @@ fun parseAndAnalyze(sources: List, disposer: Disposable, arm: Boolean = println("[report] $message") hasError = severity.isError || hasError } - }) + } configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) configuration.put(JVMConfigurationKeys.MODULE_NAME, JvmAbi.DEFAULT_MODULE_NAME)