Removed double evaluation of enum's args

This commit is contained in:
Igor Chevdar
2017-12-04 14:53:48 +03:00
parent 4a02ab2939
commit 4c07c70829
@@ -1636,6 +1636,14 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
val arg = expression.getValueArgument(0) as IrConst<String>
return context.llvm.staticData.createImmutableBinaryBlob(arg)
}
context.ir.symbols.initInstance.descriptor -> {
val callee = expression as IrCall
val initializer = callee.getValueArgument(1) as IrCall
val thiz = evaluateExpression(callee.getValueArgument(0)!!)
evaluateSimpleFunctionCall(initializer.descriptor, listOf(thiz) + evaluateExplicitArgs(initializer), lifetimes[initializer]!!)
return codegen.theUnitInstanceRef.llvm
}
}
}
@@ -2063,13 +2071,6 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
functionGenerationContext.allocInstance(typeInfoForAllocation(enumClassDescriptor), lifetimes[callee]!!)
}
context.ir.symbols.initInstance.descriptor -> {
val initializer = callee.getValueArgument(1) as IrCall
val thiz = evaluateExpression(callee.getValueArgument(0)!!)
evaluateSimpleFunctionCall(initializer.descriptor, listOf(thiz) + evaluateExplicitArgs(initializer), lifetimes[initializer]!!)
codegen.theUnitInstanceRef.llvm
}
else -> TODO(callee.descriptor.original.toString())
}
}