translator: code fix, add double type and llvm return operator

This commit is contained in:
Alexey Stepanov
2016-07-11 16:42:28 +03:00
parent c170a24cc9
commit 83a41238e2
3 changed files with 13 additions and 5 deletions
@@ -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
}
}
@@ -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()
}
@@ -21,4 +21,8 @@ class LLVMDoubleType() : LLVMType() {
return LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp")
}
override fun toString(): String {
return "double"
}
}