From 2adb334e3f4af87129555701cc1e83d9399e3709 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Wed, 10 Aug 2016 19:53:01 +0300 Subject: [PATCH] translator: fix class reassigment --- .../org/kotlinnative/translator/BlockCodegen.kt | 3 ++- .../test/kotlin/tests/input/class_reassigment_1.txt | 1 + .../test/kotlin/tests/kotlin/class_reassigment_1.kt | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 translator/src/test/kotlin/tests/input/class_reassigment_1.txt create mode 100644 translator/src/test/kotlin/tests/kotlin/class_reassigment_1.kt diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt index 53f3396646b..6efaacaf34f 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt @@ -729,7 +729,8 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va } val result = firstOp as LLVMVariable - codeBuilder.storeVariable(result, secondNativeOp) + val sourceArgument = if (result.pointer == secondOp.pointer + 1) secondOp else secondNativeOp + codeBuilder.storeVariable(result, sourceArgument) return result } else -> addPrimitiveReferenceOperation(referenceName!!, firstOp, secondNativeOp) diff --git a/translator/src/test/kotlin/tests/input/class_reassigment_1.txt b/translator/src/test/kotlin/tests/input/class_reassigment_1.txt new file mode 100644 index 00000000000..80065f860c6 --- /dev/null +++ b/translator/src/test/kotlin/tests/input/class_reassigment_1.txt @@ -0,0 +1 @@ +class_reassigment_1() == 567 diff --git a/translator/src/test/kotlin/tests/kotlin/class_reassigment_1.kt b/translator/src/test/kotlin/tests/kotlin/class_reassigment_1.kt new file mode 100644 index 00000000000..3d843b78ea3 --- /dev/null +++ b/translator/src/test/kotlin/tests/kotlin/class_reassigment_1.kt @@ -0,0 +1,12 @@ +class class_reassigment_1_class(val field: Int) + +fun class_reassigment_1_base() : class_reassigment_1_class{ + val instance = class_reassigment_1_class(567) + return instance +} + +fun class_reassigment_1(): Int{ + var instance = class_reassigment_1_class(123) + instance = class_reassigment_1_base() + return instance.field +} \ No newline at end of file