From fc6879e7fd0960a87c4bd156e50574304cf60151 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Mon, 10 Oct 2011 09:01:02 +0200 Subject: [PATCH] type info for tuples and functions --- .../jetbrains/jet/codegen/ClosureCodegen.java | 9 ++- .../jet/codegen/ExpressionCodegen.java | 3 +- .../lang/types/ProjectionErasingJetType.java | 63 +++++++++++++++++++ .../jet/codegen/ClosuresGenTest.java | 1 + .../jet/codegen/NamespaceGenTest.java | 14 +++++ .../jet/codegen/PatternMatchingTest.java | 8 +-- stdlib/src/jet/DefaultJetObject.java | 19 ++++++ stdlib/src/jet/ExtensionFunction0.java | 8 ++- stdlib/src/jet/ExtensionFunction1.java | 8 ++- stdlib/src/jet/ExtensionFunction2.java | 8 ++- stdlib/src/jet/ExtensionFunction3.java | 8 ++- stdlib/src/jet/Function0.java | 8 ++- stdlib/src/jet/Function1.java | 8 ++- stdlib/src/jet/Function2.java | 8 ++- stdlib/src/jet/Function3.java | 8 ++- stdlib/src/jet/Tuple0.java | 10 ++- stdlib/src/jet/Tuple1.java | 7 ++- stdlib/src/jet/Tuple10.java | 7 ++- stdlib/src/jet/Tuple11.java | 7 ++- stdlib/src/jet/Tuple12.java | 7 ++- stdlib/src/jet/Tuple13.java | 7 ++- stdlib/src/jet/Tuple14.java | 7 ++- stdlib/src/jet/Tuple15.java | 7 ++- stdlib/src/jet/Tuple16.java | 7 ++- stdlib/src/jet/Tuple17.java | 7 ++- stdlib/src/jet/Tuple18.java | 7 ++- stdlib/src/jet/Tuple19.java | 7 ++- stdlib/src/jet/Tuple2.java | 7 ++- stdlib/src/jet/Tuple20.java | 7 ++- stdlib/src/jet/Tuple21.java | 7 ++- stdlib/src/jet/Tuple22.java | 7 ++- stdlib/src/jet/Tuple3.java | 7 ++- stdlib/src/jet/Tuple4.java | 7 ++- stdlib/src/jet/Tuple5.java | 7 ++- stdlib/src/jet/Tuple6.java | 7 ++- stdlib/src/jet/Tuple7.java | 7 ++- stdlib/src/jet/Tuple8.java | 7 ++- stdlib/src/jet/Tuple9.java | 7 ++- stdlib/src/jet/typeinfo/TypeInfo.java | 2 +- 39 files changed, 285 insertions(+), 62 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/types/ProjectionErasingJetType.java create mode 100644 stdlib/src/jet/DefaultJetObject.java diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 864111bee96..cccef2b42c8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -13,6 +13,7 @@ import org.jetbrains.jet.lang.psi.JetFunctionLiteralExpression; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.ProjectionErasingJetType; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -117,7 +118,7 @@ public class ClosureCodegen { final Type enclosingType = context.enclosingClassType(state.getTypeMapper()); if (enclosingType == null) captureThis = false; - final Method constructor = generateConstructor(funClass, captureThis); + final Method constructor = generateConstructor(funClass, captureThis, funDescriptor.getReturnType()); if (captureThis) { cv.visitField(Opcodes.ACC_PRIVATE, "this$0", enclosingType.getDescriptor(), null, null); @@ -175,7 +176,7 @@ public class ClosureCodegen { mv.visitEnd(); } - private Method generateConstructor(String funClass, boolean captureThis) { + private Method generateConstructor(String funClass, boolean captureThis, JetType returnType) { int argCount = closure.size(); if (captureThis) { @@ -199,9 +200,11 @@ public class ClosureCodegen { final MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC, "", constructor.getDescriptor(), null, new String[0]); mv.visitCode(); InstructionAdapter iv = new InstructionAdapter(mv); + ExpressionCodegen expressionCodegen = new ExpressionCodegen(mv, null, Type.VOID_TYPE, context, state); iv.load(0, Type.getObjectType(funClass)); - iv.invokespecial(funClass, "", "()V"); + expressionCodegen.generateTypeInfo(new ProjectionErasingJetType(returnType)); + iv.invokespecial(funClass, "", "(Ljet/typeinfo/TypeInfo;)V"); i = 1; for (Type type : argTypes) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index ea7afc3dd7b..f231cdf3426 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -2318,7 +2318,7 @@ public class ExpressionCodegen extends JetVisitor { final String className = "jet/Tuple" + entries.size(); Type tupleType = Type.getObjectType(className); - StringBuilder signature = new StringBuilder("("); + StringBuilder signature = new StringBuilder("(Ljet/typeinfo/TypeInfo;"); for (int i = 0; i != entries.size(); ++i) { signature.append("Ljava/lang/Object;"); } @@ -2326,6 +2326,7 @@ public class ExpressionCodegen extends JetVisitor { v.anew(tupleType); v.dup(); + generateTypeInfo(new ProjectionErasingJetType(bindingContext.get(BindingContext.EXPRESSION_TYPE, expression))); for (JetExpression entry : entries) { gen(entry, OBJECT_TYPE); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/ProjectionErasingJetType.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/ProjectionErasingJetType.java new file mode 100644 index 00000000000..76956d129e5 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/ProjectionErasingJetType.java @@ -0,0 +1,63 @@ +package org.jetbrains.jet.lang.types; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; + +import java.util.*; + +/** + * @author alex.tkachman + * + * Utility class used by back-end to + */ +public class ProjectionErasingJetType implements JetType { + private final JetType delegate; + private List arguments; + + public ProjectionErasingJetType(JetType delegate) { + this.delegate = delegate; + arguments = new ArrayList(); + for(TypeProjection tp : delegate.getArguments()) { + arguments.add(new TypeProjection(Variance.INVARIANT, tp.getType())); + } + } + + @NotNull + @Override + public TypeConstructor getConstructor() { + return delegate.getConstructor(); + } + + @NotNull + @Override + public List getArguments() { + return arguments; + } + + @Override + public boolean isNullable() { + return false; + } + + @NotNull + @Override + public JetScope getMemberScope() { + return delegate.getMemberScope(); + } + + @Override + public List getAnnotations() { + return delegate.getAnnotations(); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return ((obj instanceof ProjectionErasingJetType) && delegate.equals(((ProjectionErasingJetType)obj).delegate)) || delegate.equals(obj); + } +} diff --git a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java index 4a1174ba55a..7d5f4a68fc8 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java @@ -6,6 +6,7 @@ package org.jetbrains.jet.codegen; public class ClosuresGenTest extends CodegenTestCase { public void testSimplestClosure() throws Exception { blackBoxFile("classes/simplestClosure.jet"); + System.out.println(generateToText()); } public void testSimplestClosureAndBoxing() throws Exception { diff --git a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java index a1f2940a78e..5c4167442fa 100644 --- a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java @@ -2,6 +2,8 @@ package org.jetbrains.jet.codegen; import jet.IntRange; import jet.Tuple2; +import jet.Tuple3; +import jet.Tuple4; import jet.typeinfo.TypeInfo; import org.jetbrains.jet.parsing.JetParsingTest; @@ -9,6 +11,7 @@ import java.awt.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; /** * @author yole @@ -489,12 +492,23 @@ public class NamespaceGenTest extends CodegenTestCase { public void testTupleLiteral() throws Exception { loadText("fun foo() = (1, \"foo\")"); + System.out.println(generateToText()); final Method main = generateFunction(); Tuple2 tuple2 = (Tuple2) main.invoke(null); assertEquals(1, tuple2._1); assertEquals("foo", tuple2._2); } + public void testParametrizedTupleLiteral() throws Exception { + loadText("fun E.foo(extra: java.util.List) = (1, \"foo\", this, extra)"); + System.out.println(generateToText()); + final Method main = generateFunction(); + Tuple4 tuple4 = (Tuple4) main.invoke(null, "aaa", Arrays.asList(10), TypeInfo.STRING_TYPE_INFO, TypeInfo.INT_TYPE_INFO); + assertEquals(1, tuple4._1); + assertEquals("foo", tuple4._2); + assertEquals("aaa", tuple4._3); + } + public void testPredicateOperator() throws Exception { loadText("fun foo(s: String) = s?startsWith(\"J\")"); final Method main = generateFunction(); diff --git a/idea/tests/org/jetbrains/jet/codegen/PatternMatchingTest.java b/idea/tests/org/jetbrains/jet/codegen/PatternMatchingTest.java index 60337ed4ff2..667415f53f3 100644 --- a/idea/tests/org/jetbrains/jet/codegen/PatternMatchingTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/PatternMatchingTest.java @@ -90,13 +90,13 @@ public class PatternMatchingTest extends CodegenTestCase { Method foo = generateFunction(); final Object result; try { - result = foo.invoke(null, new Tuple2(1, 2)); + result = foo.invoke(null, new Tuple2(null, 1, 2)); } catch (Exception e) { System.out.println(generateToText()); throw e; } assertEquals("one,two", result); - assertEquals("something", foo.invoke(null, new Tuple2("not", "tuple"))); + assertEquals("something", foo.invoke(null, new Tuple2(null, "not", "tuple"))); } public void testCall() throws Exception { @@ -119,8 +119,8 @@ public class PatternMatchingTest extends CodegenTestCase { public void testNames() throws Exception { loadText("fun foo(x: (Any, Any)) = when(x) { is (val a is String, *) => a; else => \"something\" }"); Method foo = generateFunction(); - assertEquals("JetBrains", foo.invoke(null, new Tuple2("JetBrains", "s.r.o."))); - assertEquals("something", foo.invoke(null, new Tuple2(1, 2))); + assertEquals("JetBrains", foo.invoke(null, new Tuple2(null, "JetBrains", "s.r.o."))); + assertEquals("something", foo.invoke(null, new Tuple2(null, 1, 2))); } public void testMultipleConditions() throws Exception { diff --git a/stdlib/src/jet/DefaultJetObject.java b/stdlib/src/jet/DefaultJetObject.java new file mode 100644 index 00000000000..017a47df4a7 --- /dev/null +++ b/stdlib/src/jet/DefaultJetObject.java @@ -0,0 +1,19 @@ +package jet; + +import jet.typeinfo.TypeInfo; + +/** + * @author alex.tkachman + */ +public class DefaultJetObject implements JetObject { + private TypeInfo typeInfo; + + protected DefaultJetObject(TypeInfo typeInfo) { + this.typeInfo = typeInfo; + } + + @Override + public TypeInfo getTypeInfo() { + return typeInfo; + } +} diff --git a/stdlib/src/jet/ExtensionFunction0.java b/stdlib/src/jet/ExtensionFunction0.java index 099f3bbe3a4..9d2e12fcc47 100644 --- a/stdlib/src/jet/ExtensionFunction0.java +++ b/stdlib/src/jet/ExtensionFunction0.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class ExtensionFunction0 { +import jet.typeinfo.TypeInfo; + +public abstract class ExtensionFunction0 extends DefaultJetObject{ + protected ExtensionFunction0(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(E receiver); @Override diff --git a/stdlib/src/jet/ExtensionFunction1.java b/stdlib/src/jet/ExtensionFunction1.java index 782b8ec3948..2a75a41acf6 100644 --- a/stdlib/src/jet/ExtensionFunction1.java +++ b/stdlib/src/jet/ExtensionFunction1.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class ExtensionFunction1 { +import jet.typeinfo.TypeInfo; + +public abstract class ExtensionFunction1 extends DefaultJetObject{ + protected ExtensionFunction1(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(E receiver, D d); @Override diff --git a/stdlib/src/jet/ExtensionFunction2.java b/stdlib/src/jet/ExtensionFunction2.java index 7c885c741fa..a7ffa19687a 100644 --- a/stdlib/src/jet/ExtensionFunction2.java +++ b/stdlib/src/jet/ExtensionFunction2.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class ExtensionFunction2 { +import jet.typeinfo.TypeInfo; + +public abstract class ExtensionFunction2 extends DefaultJetObject{ + protected ExtensionFunction2(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(E receiver, D1 d1, D2 d2); @Override diff --git a/stdlib/src/jet/ExtensionFunction3.java b/stdlib/src/jet/ExtensionFunction3.java index 0b034418dc5..54dd96f5f32 100644 --- a/stdlib/src/jet/ExtensionFunction3.java +++ b/stdlib/src/jet/ExtensionFunction3.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class ExtensionFunction3 { +import jet.typeinfo.TypeInfo; + +public abstract class ExtensionFunction3 extends DefaultJetObject{ + protected ExtensionFunction3(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(E receiver, D1 d1, D2 d2, D3 d3); @Override diff --git a/stdlib/src/jet/Function0.java b/stdlib/src/jet/Function0.java index 917010163f2..67515b604e1 100644 --- a/stdlib/src/jet/Function0.java +++ b/stdlib/src/jet/Function0.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class Function0 { +import jet.typeinfo.TypeInfo; + +public abstract class Function0 extends DefaultJetObject { + protected Function0(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(); @Override diff --git a/stdlib/src/jet/Function1.java b/stdlib/src/jet/Function1.java index ba1846107e1..345a47cb0a2 100644 --- a/stdlib/src/jet/Function1.java +++ b/stdlib/src/jet/Function1.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class Function1 { +import jet.typeinfo.TypeInfo; + +public abstract class Function1 extends DefaultJetObject { + protected Function1(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(D d); @Override diff --git a/stdlib/src/jet/Function2.java b/stdlib/src/jet/Function2.java index 801e95c63f0..170b1969d0e 100644 --- a/stdlib/src/jet/Function2.java +++ b/stdlib/src/jet/Function2.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class Function2 { +import jet.typeinfo.TypeInfo; + +public abstract class Function2 extends DefaultJetObject { + protected Function2(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(D1 d1, D2 d2); @Override diff --git a/stdlib/src/jet/Function3.java b/stdlib/src/jet/Function3.java index 81963444c97..54380062e6e 100644 --- a/stdlib/src/jet/Function3.java +++ b/stdlib/src/jet/Function3.java @@ -3,7 +3,13 @@ */ package jet; -public abstract class Function3 { +import jet.typeinfo.TypeInfo; + +public abstract class Function3 extends DefaultJetObject{ + protected Function3(TypeInfo typeInfo) { + super(typeInfo); + } + public abstract R invoke(D1 d1, D2 d2, D3 d3); @Override diff --git a/stdlib/src/jet/Tuple0.java b/stdlib/src/jet/Tuple0.java index 8d9db829584..34d12022230 100644 --- a/stdlib/src/jet/Tuple0.java +++ b/stdlib/src/jet/Tuple0.java @@ -1,10 +1,13 @@ package jet; +import jet.typeinfo.TypeInfo; + /** * @author alex.tkachman */ -public class Tuple0 { +public class Tuple0 implements JetObject { public static final Tuple0 INSTANCE = new Tuple0(); + private static final TypeInfo typeInfo = TypeInfo.getTypeInfo(Tuple0.class, false); private Tuple0() { } @@ -23,4 +26,9 @@ public class Tuple0 { public int hashCode() { return 239; } + + @Override + public TypeInfo getTypeInfo() { + return typeInfo; + } } \ No newline at end of file diff --git a/stdlib/src/jet/Tuple1.java b/stdlib/src/jet/Tuple1.java index fd9214be8d3..c50550d258b 100644 --- a/stdlib/src/jet/Tuple1.java +++ b/stdlib/src/jet/Tuple1.java @@ -1,9 +1,12 @@ package jet; -public class Tuple1 { +import jet.typeinfo.TypeInfo; + +public class Tuple1 extends DefaultJetObject { public final T1 _1; - public Tuple1(T1 t1) { + public Tuple1(TypeInfo typeInfo, T1 t1) { + super(typeInfo); _1 = t1; } diff --git a/stdlib/src/jet/Tuple10.java b/stdlib/src/jet/Tuple10.java index c8d6a0077a3..065ef8888ca 100644 --- a/stdlib/src/jet/Tuple10.java +++ b/stdlib/src/jet/Tuple10.java @@ -1,6 +1,8 @@ package jet; -public class Tuple10 { +import jet.typeinfo.TypeInfo; + +public class Tuple10 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -12,7 +14,8 @@ public class Tuple10 { public final T9 _9; public final T10 _10; - public Tuple10(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10) { + public Tuple10(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple11.java b/stdlib/src/jet/Tuple11.java index a662f9c7b31..dcf69b1920a 100644 --- a/stdlib/src/jet/Tuple11.java +++ b/stdlib/src/jet/Tuple11.java @@ -1,6 +1,8 @@ package jet; -public class Tuple11 { +import jet.typeinfo.TypeInfo; + +public class Tuple11 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -13,7 +15,8 @@ public class Tuple11 { public final T10 _10; public final T11 _11; - public Tuple11(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11) { + public Tuple11(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple12.java b/stdlib/src/jet/Tuple12.java index 2c003f48433..a0a55e4efc6 100644 --- a/stdlib/src/jet/Tuple12.java +++ b/stdlib/src/jet/Tuple12.java @@ -1,6 +1,8 @@ package jet; -public class Tuple12 { +import jet.typeinfo.TypeInfo; + +public class Tuple12 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -14,7 +16,8 @@ public class Tuple12 { public final T11 _11; public final T12 _12; - public Tuple12(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12) { + public Tuple12(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple13.java b/stdlib/src/jet/Tuple13.java index bb2d40775d4..fff29fd6840 100644 --- a/stdlib/src/jet/Tuple13.java +++ b/stdlib/src/jet/Tuple13.java @@ -1,6 +1,8 @@ package jet; -public class Tuple13 { +import jet.typeinfo.TypeInfo; + +public class Tuple13 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -15,7 +17,8 @@ public class Tuple13 { public final T12 _12; public final T13 _13; - public Tuple13(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13) { + public Tuple13(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple14.java b/stdlib/src/jet/Tuple14.java index 11d3bb1f700..ed43c45f96d 100644 --- a/stdlib/src/jet/Tuple14.java +++ b/stdlib/src/jet/Tuple14.java @@ -1,6 +1,8 @@ package jet; -public class Tuple14 { +import jet.typeinfo.TypeInfo; + +public class Tuple14 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -16,7 +18,8 @@ public class Tuple14 { +import jet.typeinfo.TypeInfo; + +public class Tuple15 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -17,7 +19,8 @@ public class Tuple15 { +import jet.typeinfo.TypeInfo; + +public class Tuple16 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -18,7 +20,8 @@ public class Tuple16 { +import jet.typeinfo.TypeInfo; + +public class Tuple17 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -19,7 +21,8 @@ public class Tuple17 { +import jet.typeinfo.TypeInfo; + +public class Tuple18 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -20,7 +22,8 @@ public class Tuple18 { +import jet.typeinfo.TypeInfo; + +public class Tuple19 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -21,7 +23,8 @@ public class Tuple19 { +import jet.typeinfo.TypeInfo; + +public class Tuple2 extends DefaultJetObject { public final T1 _1; public final T2 _2; - public Tuple2(T1 t1, T2 t2) { + public Tuple2(TypeInfo typeInfo, T1 t1, T2 t2) { + super(typeInfo); _1 = t1; _2 = t2; } diff --git a/stdlib/src/jet/Tuple20.java b/stdlib/src/jet/Tuple20.java index a7afabf2e5a..21bc043be64 100644 --- a/stdlib/src/jet/Tuple20.java +++ b/stdlib/src/jet/Tuple20.java @@ -1,6 +1,8 @@ package jet; -public class Tuple20 { +import jet.typeinfo.TypeInfo; + +public class Tuple20 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -22,7 +24,8 @@ public class Tuple20 { +import jet.typeinfo.TypeInfo; + +public class Tuple21 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -23,7 +25,8 @@ public class Tuple21 { +import jet.typeinfo.TypeInfo; + +public class Tuple22 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -24,7 +26,8 @@ public class Tuple22 { +import jet.typeinfo.TypeInfo; + +public class Tuple3 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; - public Tuple3(T1 t1, T2 t2, T3 t3) { + public Tuple3(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple4.java b/stdlib/src/jet/Tuple4.java index a756455249f..743543503ef 100644 --- a/stdlib/src/jet/Tuple4.java +++ b/stdlib/src/jet/Tuple4.java @@ -1,12 +1,15 @@ package jet; -public class Tuple4 { +import jet.typeinfo.TypeInfo; + +public class Tuple4 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; public final T4 _4; - public Tuple4(T1 t1, T2 t2, T3 t3, T4 t4) { + public Tuple4(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple5.java b/stdlib/src/jet/Tuple5.java index b96edcea1e2..8ff54f422b6 100644 --- a/stdlib/src/jet/Tuple5.java +++ b/stdlib/src/jet/Tuple5.java @@ -1,13 +1,16 @@ package jet; -public class Tuple5 { +import jet.typeinfo.TypeInfo; + +public class Tuple5 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; public final T4 _4; public final T5 _5; - public Tuple5(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) { + public Tuple5(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple6.java b/stdlib/src/jet/Tuple6.java index f8b778ac7d6..2b855a01fe8 100644 --- a/stdlib/src/jet/Tuple6.java +++ b/stdlib/src/jet/Tuple6.java @@ -1,6 +1,8 @@ package jet; -public class Tuple6 { +import jet.typeinfo.TypeInfo; + +public class Tuple6 extends DefaultJetObject { public final T1 _1; public final T2 _2; public final T3 _3; @@ -8,7 +10,8 @@ public class Tuple6 { public final T5 _5; public final T6 _6; - public Tuple6(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) { + public Tuple6(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple7.java b/stdlib/src/jet/Tuple7.java index e5cc9969590..baf95a8339f 100644 --- a/stdlib/src/jet/Tuple7.java +++ b/stdlib/src/jet/Tuple7.java @@ -1,6 +1,8 @@ package jet; -public class Tuple7 { +import jet.typeinfo.TypeInfo; + +public class Tuple7 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -9,7 +11,8 @@ public class Tuple7 { public final T6 _6; public final T7 _7; - public Tuple7(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) { + public Tuple7(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple8.java b/stdlib/src/jet/Tuple8.java index 6c066f3b8c0..f71bf7593be 100644 --- a/stdlib/src/jet/Tuple8.java +++ b/stdlib/src/jet/Tuple8.java @@ -1,6 +1,8 @@ package jet; -public class Tuple8 { +import jet.typeinfo.TypeInfo; + +public class Tuple8 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -10,7 +12,8 @@ public class Tuple8 { public final T7 _7; public final T8 _8; - public Tuple8(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) { + public Tuple8(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/Tuple9.java b/stdlib/src/jet/Tuple9.java index bb83db5317d..7bc9da9ef7e 100644 --- a/stdlib/src/jet/Tuple9.java +++ b/stdlib/src/jet/Tuple9.java @@ -1,6 +1,8 @@ package jet; -public class Tuple9 { +import jet.typeinfo.TypeInfo; + +public class Tuple9 extends DefaultJetObject{ public final T1 _1; public final T2 _2; public final T3 _3; @@ -11,7 +13,8 @@ public class Tuple9 { public final T8 _8; public final T9 _9; - public Tuple9(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) { + public Tuple9(TypeInfo typeInfo, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9) { + super(typeInfo); _1 = t1; _2 = t2; _3 = t3; diff --git a/stdlib/src/jet/typeinfo/TypeInfo.java b/stdlib/src/jet/typeinfo/TypeInfo.java index 19bc40b4a5e..57d13423562 100644 --- a/stdlib/src/jet/typeinfo/TypeInfo.java +++ b/stdlib/src/jet/typeinfo/TypeInfo.java @@ -22,7 +22,7 @@ public abstract class TypeInfo implements JetObject { public static final TypeInfo INT_TYPE_INFO = getTypeInfo(Integer.class, false); public static final TypeInfo LONG_TYPE_INFO = getTypeInfo(Long.class, false); public static final TypeInfo CHAR_TYPE_INFO = getTypeInfo(Character.class, false); - public static final TypeInfo BOOL_TYPE_INFO = getTypeInfo(Boolean.class, false); + public static final TypeInfo BOOLEAN_TYPE_INFO = getTypeInfo(Boolean.class, false); public static final TypeInfo FLOAT_TYPE_INFO = getTypeInfo(Float.class, false); public static final TypeInfo DOUBLE_TYPE_INFO = getTypeInfo(Double.class, false);