diff --git a/idea/src/jet/Library.jet b/idea/src/jet/Library.jet index b4a06a24eba..9fbf46d6e81 100644 --- a/idea/src/jet/Library.jet +++ b/idea/src/jet/Library.jet @@ -78,7 +78,6 @@ class String() : Comparable { val length : Int fun plus(other : Any?) : String - fun plusAssign(other: Any?): String fun equals(other : Any?) : Boolean fun equalsIgnoreCase(other: String?) : Boolean diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 50220726299..02e31d88dda 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1268,14 +1268,8 @@ public class ExpressionCodegen extends JetVisitor { } } else { - if (callable instanceof IntrinsicMethod) { - final IntrinsicMethod intrinsic = (IntrinsicMethod) callable; - intrinsic.generate(this, v, Type.VOID_TYPE, expression, Arrays.asList(lhs, expression.getRight()), false); - } - else { - final boolean keepReturnValue = !((FunctionDescriptor) op).getReturnType().equals(JetStandardClasses.getUnitType()); - callAugAssignMethod(expression, (CallableMethod) callable, lhsType, keepReturnValue); - } + final boolean keepReturnValue = !((FunctionDescriptor) op).getReturnType().equals(JetStandardClasses.getUnitType()); + callAugAssignMethod(expression, (CallableMethod) callable, lhsType, keepReturnValue); } } diff --git a/idea/src/org/jetbrains/jet/codegen/intrinsics/Concat.java b/idea/src/org/jetbrains/jet/codegen/intrinsics/Concat.java index 1e2cd00caab..3690e2b2b12 100644 --- a/idea/src/org/jetbrains/jet/codegen/intrinsics/Concat.java +++ b/idea/src/org/jetbrains/jet/codegen/intrinsics/Concat.java @@ -16,7 +16,13 @@ public class Concat implements IntrinsicMethod { @Override public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List arguments, boolean haveReceiver) { codegen.generateStringBuilderConstructor(); - codegen.invokeAppend(arguments.get(0)); + if (haveReceiver) { + v.swap(); + codegen.invokeAppendMethod(codegen.expressionType(arguments.get(0))); + } + else { + codegen.invokeAppend(arguments.get(0)); + } codegen.invokeAppend(arguments.get(1)); v.invokevirtual(ExpressionCodegen.CLASS_STRING_BUILDER, "toString", "()Ljava/lang/String;"); return StackValue.onStack(Type.getObjectType("java/lang/String")); diff --git a/idea/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java b/idea/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java index b7a5c232b3f..b3285004a4f 100644 --- a/idea/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java +++ b/idea/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java @@ -66,7 +66,6 @@ public class IntrinsicMethods { declareIntrinsicFunction("Boolean", "not", 0, new Not()); declareIntrinsicFunction("String", "plus", 1, new Concat()); - declareIntrinsicFunction("String", "plusAssign", 1, new PlusConcat()); declareIntrinsicStringMethods(); } diff --git a/idea/src/org/jetbrains/jet/codegen/intrinsics/PlusConcat.java b/idea/src/org/jetbrains/jet/codegen/intrinsics/PlusConcat.java deleted file mode 100644 index 75b9d1f941c..00000000000 --- a/idea/src/org/jetbrains/jet/codegen/intrinsics/PlusConcat.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.jetbrains.jet.codegen.intrinsics; - -import com.intellij.psi.PsiElement; -import org.jetbrains.jet.codegen.ExpressionCodegen; -import org.jetbrains.jet.codegen.StackValue; -import org.jetbrains.jet.lang.psi.JetExpression; -import org.objectweb.asm.Type; -import org.objectweb.asm.commons.InstructionAdapter; - -import java.util.List; - -/** - * @author yole - */ -public class PlusConcat implements IntrinsicMethod { - @Override - public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List arguments, boolean haveReceiver) { - final JetExpression lhs = arguments.get(0); - final Type lhsType = codegen.expressionType(lhs); - codegen.generateStringBuilderConstructor(); // StringBuilder - StackValue value = codegen.generateIntermediateValue(lhs); // StringBuilder receiver - value.dupReceiver(v, 1); // receiver StringBuilder receiver - value.put(lhsType, v); // receiver StringBuilder value - codegen.invokeAppendMethod(lhsType); // receiver StringBuilder - codegen.invokeAppend(arguments.get(1)); // receiver StringBuilder - v.invokevirtual(ExpressionCodegen.CLASS_STRING_BUILDER, "toString", "()Ljava/lang/String;"); - value.store(v); - return null; - } -}