small optimizaton of toString for primitive types (no boxing needed)
This commit is contained in:
@@ -48,6 +48,7 @@ import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.*;
|
import org.jetbrains.jet.lang.resolve.calls.*;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
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.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.*;
|
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;");
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.asm4.Type;
|
import org.jetbrains.asm4.Type;
|
||||||
import org.jetbrains.asm4.commons.InstructionAdapter;
|
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.ExpressionCodegen;
|
||||||
import org.jetbrains.jet.codegen.StackValue;
|
import org.jetbrains.jet.codegen.StackValue;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -42,8 +42,14 @@ public class ToString implements IntrinsicMethod {
|
|||||||
StackValue receiver,
|
StackValue receiver,
|
||||||
@NotNull GenerationState state
|
@NotNull GenerationState state
|
||||||
) {
|
) {
|
||||||
receiver.put(AsmTypeConstants.OBJECT_TYPE, v);
|
if (receiver.type.getSort() == Type.OBJECT || receiver.type.getSort() == Type.ARRAY) {
|
||||||
v.invokestatic("java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;");
|
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);
|
return StackValue.onStack(AsmTypeConstants.JAVA_STRING_TYPE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fun box(): String {
|
||||||
|
if (239.toByte().toString() != (239.toByte() as Byte?).toString()) return "byte failed"
|
||||||
|
if (239.toShort().toString() != (239.toShort() as Short?).toString()) return "short failed"
|
||||||
|
if (239.toInt().toString() != (239.toInt() as Int?).toString()) return "int failed"
|
||||||
|
if (239.toLong().toString() != (239.toLong() as Long?).toString()) return "long failed"
|
||||||
|
if (239.toDouble().toString() != (239.toDouble() as Double?).toString()) return "double failed"
|
||||||
|
if (true.toString() != (true as Boolean?).toString()) return "boolean failed"
|
||||||
|
if ('a'.toChar().toString() != ('a'.toChar() as Char?).toString()) return "char failed"
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -448,4 +448,8 @@ public class PrimitiveTypesTest extends CodegenTestCase {
|
|||||||
public void testEmptyRanges() throws Exception {
|
public void testEmptyRanges() throws Exception {
|
||||||
blackBoxFile("emptyRanges.kt");
|
blackBoxFile("emptyRanges.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testToString() throws Exception {
|
||||||
|
blackBoxFile("intrinsics/tostring.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user