From 83a41238e27f587399810c19bd37ced6590355ba Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Mon, 11 Jul 2016 16:42:28 +0300 Subject: [PATCH] translator: code fix, add double type and llvm return operator --- .../org/kotlinnative/translator/FunctionCodegen.kt | 10 +++++----- .../org/kotlinnative/translator/llvm/LLVMBuilder.kt | 4 ++++ .../translator/llvm/types/LLVMDoubleType.kt | 4 ++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt index b3ff88a9f5f..29ad1ac1c7b 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/FunctionCodegen.kt @@ -49,7 +49,7 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction else -> UnsupportedOperationException() } - expressionWalker(expr?.getNextSiblingIgnoringWhitespaceAndComments()) + expressionWalker(expr.getNextSiblingIgnoringWhitespaceAndComments()) } private fun evaluateExpression(expr: PsiElement?): LLVMNode? { @@ -81,10 +81,10 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction var currentArg = argumentList?.getNextSiblingIgnoringWhitespaceAndComments() while (currentArg?.text != ")" && currentArg != null) { - args.add(currentArg?.text) + args.add(currentArg.text) currentArg = currentArg - ?.getNextSiblingIgnoringWhitespaceAndComments() + .getNextSiblingIgnoringWhitespaceAndComments() ?.getNextSiblingIgnoringWhitespaceAndComments() } return args @@ -125,7 +125,7 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction val identifier = element.getNextSiblingIgnoringWhitespaceAndComments() val eq = identifier?.getNextSiblingIgnoringWhitespaceAndComments() ?: return null - val assignExpression = evaluateExpression(eq?.getNextSiblingIgnoringWhitespaceAndComments()) ?: return null + val assignExpression = evaluateExpression(eq.getNextSiblingIgnoringWhitespaceAndComments()) ?: return null codeBuilder.addAssignment(LLVMVariable("%${identifier!!.text}"), assignExpression) return null } @@ -134,7 +134,7 @@ class FunctionCodegen(val state: TranslationState, val function: KtNamedFunction var next = element.getNextSiblingIgnoringWhitespaceAndComments() val retVar = evaluateExpression(next) as LLVMVariable - codeBuilder.addLLVMCode("ret i32 ${retVar?.label}") + codeBuilder.addReturnOperator(retVar) return null } } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt index 69a0857ee1e..b8cc7c7a132 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt @@ -52,6 +52,10 @@ class LLVMBuilder { llvmCode.appendln("$llvmVariable = $rhs") } + fun addReturnOperator(llvmVariable: LLVMVariable) { + llvmCode.appendln("ret i32 $llvmVariable") + } + override fun toString(): String { return llvmCode.toString() } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt index a30461a35e6..b0c21d2834b 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt @@ -21,4 +21,8 @@ class LLVMDoubleType() : LLVMType() { return LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp") } + override fun toString(): String { + return "double" + } + } \ No newline at end of file