From a850ca37aa118cabab9dffdf9c6585c6b00a30d2 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Thu, 23 Jun 2011 15:35:24 +0400 Subject: [PATCH] fix tests --- .../org/jetbrains/jet/codegen/ClosureCodegen.java | 3 ++- .../jetbrains/jet/codegen/ExpressionCodegen.java | 2 +- idea/src/org/jetbrains/jet/codegen/StackValue.java | 13 ++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/idea/src/org/jetbrains/jet/codegen/ClosureCodegen.java index afba5b74753..ad5ec8d77eb 100644 --- a/idea/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -116,7 +116,8 @@ public class ClosureCodegen { final List params = funDescriptor.getUnsubstitutedValueParameters(); int count = 1; for (ValueParameterDescriptor param : params) { - StackValue.local(count, JetTypeMapper.TYPE_OBJECT).put(typeMapper.mapType(param.getOutType()), iv); + StackValue.local(count, JetTypeMapper.TYPE_OBJECT).put(JetTypeMapper.TYPE_OBJECT, iv); + StackValue.onStack(JetTypeMapper.TYPE_OBJECT).upcast(typeMapper.mapType(param.getOutType()), iv); count++; } diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index ac8cedd2378..498aa1de6e6 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -795,7 +795,7 @@ public class ExpressionCodegen extends JetVisitor { if (methodDescriptor.getReturnType() != Type.VOID_TYPE) { final Type retType = typeMapper.mapType(fd.getUnsubstitutedReturnType()); - StackValue.onStack(methodDescriptor.getReturnType()).put(retType, v); + StackValue.onStack(methodDescriptor.getReturnType()).upcast(retType, v); myStack.push(StackValue.onStack(retType)); } } diff --git a/idea/src/org/jetbrains/jet/codegen/StackValue.java b/idea/src/org/jetbrains/jet/codegen/StackValue.java index 8c99986ed4c..7ed07ef2342 100644 --- a/idea/src/org/jetbrains/jet/codegen/StackValue.java +++ b/idea/src/org/jetbrains/jet/codegen/StackValue.java @@ -130,12 +130,23 @@ public abstract class StackValue { } } - protected void coerce(Type type, InstructionAdapter v) { + public void upcast(Type type, InstructionAdapter v) { if (type.equals(this.type)) return; if (type.getSort() == Type.OBJECT && this.type.getSort() == Type.OBJECT) { v.checkcast(type); } + else { + coerce(type, v); + } + } + + protected void coerce(Type type, InstructionAdapter v) { + if (type.equals(this.type)) return; + + if (type.getSort() == Type.OBJECT && this.type.getSort() == Type.OBJECT) { + // v.checkcast(type); + } else if (type.getSort() == Type.OBJECT) { box(this.type, type, v); }