From 3d918ba7e5fa121cee10bcd075ef33d57516ab83 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 12 Dec 2011 17:37:42 +0400 Subject: [PATCH 1/4] Docs --- .../org/jetbrains/jet/lang/resolve/calls/ResolvedCall.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolvedCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolvedCall.java index 521e7063eba..f5545f22ddb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolvedCall.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolvedCall.java @@ -13,11 +13,11 @@ import java.util.Map; * @author abreslav */ public interface ResolvedCall { - /** A target callable descriptor as it was accessible in the corresponding scope, i.e. with type parameters not substituted */ + /** A target callable descriptor as it was accessible in the corresponding scope, i.e. with type arguments not substituted */ @NotNull D getCandidateDescriptor(); - /** Type parameters are substituted */ + /** Type arguments are substituted. This descriptor is guaranteed to have NO declared type parameters */ @NotNull D getResultingDescriptor(); From c45d08b7e5405e68370a16ce835595f578bb55d6 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Mon, 12 Dec 2011 16:21:02 +0200 Subject: [PATCH 2/4] fix for KT-796/797 candidate/resultingDescriptor misuse --- .../src/org/jetbrains/jet/codegen/ExpressionCodegen.java | 2 +- compiler/testData/codegen/regressions/kt796_797.jet | 8 ++++++++ compiler/tests/org/jetbrains/jet/codegen/VarArgTest.java | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/regressions/kt796_797.jet diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 9eef892f33e..c9374b6dfa7 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -2199,7 +2199,7 @@ public class ExpressionCodegen extends JetVisitor { if(getterDescriptor.getReceiverParameter().exists()) { index++; } - for (TypeParameterDescriptor typeParameterDescriptor : getterDescriptor.getTypeParameters()) { + for (TypeParameterDescriptor typeParameterDescriptor : resolvedGetCall.getCandidateDescriptor().getTypeParameters()) { if(typeParameterDescriptor.isReified()) { generateTypeInfo(resolvedGetCall.getTypeArguments().get(typeParameterDescriptor), null); index++; diff --git a/compiler/testData/codegen/regressions/kt796_797.jet b/compiler/testData/codegen/regressions/kt796_797.jet new file mode 100644 index 00000000000..03ae120b510 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt796_797.jet @@ -0,0 +1,8 @@ +fun Array?.get(i : Int?) = this.sure().get(i.sure()) +fun array(vararg t : T) : Array = t + +fun box() : String { + val a : Array? = array("Str", "Str2") + val i : Int? = 1 + return if(a[i] == "Str2") "OK" else "fail" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/VarArgTest.java b/compiler/tests/org/jetbrains/jet/codegen/VarArgTest.java index e08b515771c..4a68f35e678 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/VarArgTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/VarArgTest.java @@ -74,4 +74,8 @@ public class VarArgTest extends CodegenTestCase { createEnvironmentWithFullJdk(); blackBoxFile("regressions/kt581.jet"); } + + public void testKt797() { + blackBoxFile("regressions/kt796_797.jet"); + } } From 226d1577051fd297152ad983e1f0f52291ae9618 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 12 Dec 2011 19:20:05 +0400 Subject: [PATCH 3/4] add one more condition to ErrorUtils.isError approved by Andrey Breslav --- .../frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 1c77b65f443..ee76f1ed2e9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -203,7 +203,7 @@ public class ErrorUtils { } public static boolean isError(@NotNull DeclarationDescriptor candidate) { - return candidate.getContainingDeclaration() == getErrorClass() || candidate == ERROR_MODULE; + return candidate == getErrorClass() || candidate.getContainingDeclaration() == getErrorClass() || candidate == ERROR_MODULE; } private static class ErrorTypeImpl implements JetType { From 9f87ea37a8f062cd05176468e5779a44e7ef9caf Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 12 Dec 2011 19:33:22 +0400 Subject: [PATCH 4/4] introduce jet/JetObject class name constant --- .../src/org/jetbrains/jet/codegen/ExpressionCodegen.java | 7 ++++--- .../jetbrains/jet/codegen/ImplementationBodyCodegen.java | 3 ++- .../jetbrains/jet/codegen/intrinsics/ValueTypeInfo.java | 3 ++- .../src/org/jetbrains/jet/lang/resolve/StdlibNames.java | 4 ++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index c9374b6dfa7..0e81f301460 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -12,6 +12,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.StdlibNames; import org.jetbrains.jet.lang.resolve.calls.*; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.java.JavaClassDescriptor; @@ -2618,16 +2619,16 @@ If finally block is present, its last expression is the value of try expression. } else { v.load(0, TYPE_OBJECT); - v.invokeinterface("jet/JetObject", "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); + v.invokeinterface(StdlibNames.JET_OBJECT_TYPE.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); } } else { v.load(0, TYPE_OBJECT); while(descriptor != containingDeclaration) { descriptor = CodegenUtil.getOuterClassDescriptor(descriptor); - v.invokeinterface("jet/JetObject", "getOuterObject", "()Ljet/JetObject;"); + v.invokeinterface(StdlibNames.JET_OBJECT_TYPE.getInternalName(), "getOuterObject", "()Ljet/JetObject;"); } - v.invokeinterface("jet/JetObject", "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); + v.invokeinterface(StdlibNames.JET_OBJECT_TYPE.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); } v.aconst(ownerType); v.iconst(typeParameterDescriptor.getIndex()); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index a637350f361..5ae78f4a284 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -6,6 +6,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.OverridingUtil; +import org.jetbrains.jet.lang.resolve.StdlibNames; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; @@ -59,7 +60,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { getSuperClass(); List interfaces = new ArrayList(); - interfaces.add("jet/JetObject"); + interfaces.add(StdlibNames.JET_OBJECT_TYPE.getInternalName()); interfaces.addAll(getSuperInterfaces(myClass)); boolean isAbstract = false; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/ValueTypeInfo.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/ValueTypeInfo.java index 3c9c43d97f7..c604a291d3e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/ValueTypeInfo.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/ValueTypeInfo.java @@ -5,6 +5,7 @@ import org.jetbrains.jet.codegen.ExpressionCodegen; import org.jetbrains.jet.codegen.JetTypeMapper; import org.jetbrains.jet.codegen.StackValue; import org.jetbrains.jet.lang.psi.JetExpression; +import org.jetbrains.jet.lang.resolve.StdlibNames; import org.objectweb.asm.Type; import org.objectweb.asm.commons.InstructionAdapter; @@ -17,7 +18,7 @@ public class ValueTypeInfo implements IntrinsicMethod { @Override public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List arguments, StackValue receiver) { codegen.gen(arguments.get(0), JetTypeMapper.TYPE_JET_OBJECT); - v.invokeinterface("jet/JetObject", "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); + v.invokeinterface(StdlibNames.JET_OBJECT_TYPE.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;"); return StackValue.onStack(JetTypeMapper.TYPE_TYPEINFO); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/StdlibNames.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/StdlibNames.java index fcc779f5c99..aaad7538e0f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/StdlibNames.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/StdlibNames.java @@ -29,4 +29,8 @@ public class StdlibNames { public static final String JET_METHOD_NULLABLE_RETURN_TYPE_FIELD = "nullableReturnType"; + + public static final Type JET_OBJECT_TYPE = Type.getObjectType("jet/JetObject"); + public static final String JET_OBJECT_CLASS = "jet.JetObject"; + public static final String JET_OBJECT_DESCRIPTOR = "Ljet/JetObject;"; }