small optimizaton of toString for primitive types (no boxing needed)

This commit is contained in:
Alex Tkachman
2012-09-17 09:07:08 +03:00
parent 58af365eb2
commit 3b96624c81
4 changed files with 26 additions and 4 deletions
@@ -48,6 +48,7 @@ import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.calls.*;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.scopes.receivers.*;
@@ -998,7 +999,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
}
}
v.invokevirtual("java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
return StackValue.onStack(expressionType(expression));
return StackValue.onStack(AsmTypeConstants.JAVA_STRING_TYPE);
}
}
@@ -20,11 +20,11 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.asm4.Type;
import org.jetbrains.asm4.commons.InstructionAdapter;
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.codegen.ExpressionCodegen;
import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import java.util.List;
@@ -42,8 +42,14 @@ public class ToString implements IntrinsicMethod {
StackValue receiver,
@NotNull GenerationState state
) {
receiver.put(AsmTypeConstants.OBJECT_TYPE, v);
v.invokestatic("java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;");
if (receiver.type.getSort() == Type.OBJECT || receiver.type.getSort() == Type.ARRAY) {
receiver.put(AsmTypeConstants.OBJECT_TYPE, v);
v.invokestatic("java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;");
}
else {
receiver.put(receiver.type, v);
v.invokestatic("java/lang/String", "valueOf", "(" + receiver.type.getDescriptor() + ")Ljava/lang/String;");
}
return StackValue.onStack(AsmTypeConstants.JAVA_STRING_TYPE);
}
}