diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/StructCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/StructCodegen.kt index ec4cddd7f69..889ff36a597 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/StructCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/StructCodegen.kt @@ -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() { diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt index 1f28d8146a9..27e044d0bb0 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/generators.kt @@ -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