From 7b7987ba0da62666be139b1f499bb853bb2c7792 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Sat, 28 Apr 2012 08:09:02 +0300 Subject: [PATCH] KT-1759 str.plus(str) --- .../org/jetbrains/jet/codegen/intrinsics/Concat.java | 4 +++- compiler/testData/codegen/regressions/kt1759.kt | 11 +++++++++++ .../tests/org/jetbrains/jet/codegen/ClassGenTest.java | 5 ++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/regressions/kt1759.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/Concat.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/Concat.java index c06ad378323..debed8671dc 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/Concat.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/Concat.java @@ -34,12 +34,14 @@ import java.util.List; public class Concat implements IntrinsicMethod { @Override public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List arguments, StackValue receiver, @NotNull GenerationState state) { - codegen.generateStringBuilderConstructor(); if (receiver == null || receiver == StackValue.none()) { // LHS + RHS + codegen.generateStringBuilderConstructor(); codegen.invokeAppend(arguments.get(0)); // StringBuilder(LHS) codegen.invokeAppend(arguments.get(1)); } else { // LHS.plus(RHS) + receiver.put(JetTypeMapper.TYPE_OBJECT, v); + codegen.generateStringBuilderConstructor(); v.swap(); // StringBuilder LHS codegen.invokeAppendMethod(expectedType); // StringBuilder(LHS) codegen.invokeAppend(arguments.get(0)); diff --git a/compiler/testData/codegen/regressions/kt1759.kt b/compiler/testData/codegen/regressions/kt1759.kt new file mode 100644 index 00000000000..c4027f8970b --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1759.kt @@ -0,0 +1,11 @@ +class Greeter(var name : String) { + fun greet() { + name = name.plus("") + System.out?.println("Hello, $name"); + } +} + +fun box() : String { + Greeter("OK").greet() + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java index e81e633ff92..8598ee335b8 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -310,7 +310,10 @@ public class ClassGenTest extends CodegenTestCase { public void testKt1538() throws Exception { blackBoxFile("regressions/kt1538.kt"); - System.out.println(generateToText()); + } + + public void testKt1759() throws Exception { + blackBoxFile("regressions/kt1759.kt"); } public void testResolveOrder() throws Exception {