processing Call IR expressions and void functions (crash expected)
This commit is contained in:
+1
-1
@@ -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))
|
||||
|
||||
+4
-2
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user