translator: order class fix
This commit is contained in:
@@ -186,13 +186,16 @@ abstract class StructCodegen(val state: TranslationState,
|
||||
|
||||
val blockCodegen = object : BlockCodegen(state, variableManager, codeBuilder) {}
|
||||
val receiverThis = LLVMVariable("classvariable.this.addr", type, scope = LLVMRegisterScope(), pointer = 1)
|
||||
codeBuilder.addComment("field initilizers starts")
|
||||
for ((variable, initializer) in initializedFields) {
|
||||
val left = blockCodegen.evaluateMemberMethodOrField(receiverThis, variable.label, blockCodegen.topLevel, call = null)!!
|
||||
codeBuilder.addComment("left expression")
|
||||
val right = blockCodegen.evaluateExpression(initializer, scopeDepth = blockCodegen.topLevel)!!
|
||||
|
||||
codeBuilder.addComment("right expression")
|
||||
blockCodegen.executeBinaryExpression(KtTokens.EQ, referenceName = null, left = left, right = right)
|
||||
codeBuilder.addComment("next initializer")
|
||||
}
|
||||
|
||||
codeBuilder.addComment("field initilizers ends")
|
||||
}
|
||||
|
||||
private fun generateReturn() {
|
||||
|
||||
@@ -30,7 +30,8 @@ fun LLVMInstanceOfStandardType(name: String, type: KotlinType, scope: LLVMScope
|
||||
type.isUnit() -> LLVMVariable("", LLVMVoidType(), name, scope)
|
||||
type.isMarkedNullable -> LLVMVariable(name, LLVMReferenceType(type.toString().dropLast(1), prefix = "class"), name, scope, pointer = 1)
|
||||
else -> {
|
||||
val refType = state.classes[type.toString()]!!.type
|
||||
val refType = state.classes[type.toString()]?.type ?: LLVMReferenceType(type.toString(), align = state.pointerAllign, prefix = "class")
|
||||
|
||||
val result = LLVMVariable(name, refType, name, scope, pointer = 1)
|
||||
refType.location.addAll(type.getSubtypesPredicate().toString().split(".").dropLast(1))
|
||||
result
|
||||
|
||||
Reference in New Issue
Block a user