processing Call IR expressions and void functions (crash expected)

This commit is contained in:
Vasily Levchenko
2016-11-01 12:48:46 +03:00
parent ecdac4190c
commit 08bfdb652c
2 changed files with 5 additions and 3 deletions
@@ -125,7 +125,7 @@ internal class CodeGenerator(override val context:Context) : ContextUtils {
fun load(value:LLVMOpaqueValue, varName: String):LLVMOpaqueValue = LLVMBuildLoad(context.llvmBuilder, value, varName)!!
fun store(value:LLVMOpaqueValue, ptr:LLVMOpaqueValue):LLVMOpaqueValue = LLVMBuildStore(context.llvmBuilder, value, ptr)!!
fun call(descriptor: FunctionDescriptor, args: MutableList<LLVMOpaqueValue?>, result: String): LLVMOpaqueValue? {
fun call(descriptor: FunctionDescriptor, args: MutableList<LLVMOpaqueValue?>, result: String?): LLVMOpaqueValue? {
if (args.size == 0) return LLVMBuildCall(context.llvmBuilder, descriptor.llvmFunction.getLlvmValue(), null, 0, result)
memScoped {
val rargs = alloc(array[args.size](Ref to LLVMOpaqueValue))
@@ -84,8 +84,8 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid
evaluateCall(generator.tmpVariable(), expression)
}
override fun visitConstructor(declaration: IrConstructor, data: Nothing?) {
super.visitConstructor(declaration, data)
override fun visitCall(expression: IrCall) {
evaluateExpression(generator.tmpVariable(), expression)
}
override fun visitFunction(declaration: IrFunction) {
@@ -183,6 +183,8 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid
}
private fun evaluateSimpleFunctionCall(tmpVariableName: String, value: IrCall, args: MutableList<LLVMOpaqueValue?>): LLVMOpaqueValue? {
if (KotlinBuiltIns.isUnit(value.descriptor.returnType!!))
return generator.call(value.descriptor as FunctionDescriptor, args, null)
return generator.call(value.descriptor as FunctionDescriptor, args, tmpVariableName)
}