From: <ma...@us...> - 2010-04-15 01:28:02
|
Revision: 13880 http://x10.svn.sourceforge.net/x10/?rev=13880&view=rev Author: makinoy Date: 2010-04-15 01:27:54 +0000 (Thu, 15 Apr 2010) Log Message: ----------- Change the runtime type information infrastructure in Java back-end. Related Issue: XTENLANG-1102 Modified Paths: -------------- trunk/x10.compiler/src/x10/emitter/Emitter.java trunk/x10.compiler/src/x10/emitter/RuntimeTypeExpander.java trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java trunk/x10.runtime/src-java/x10/core/Any.java trunk/x10.runtime/src-java/x10/core/AnyRail.java trunk/x10.runtime/src-java/x10/core/GrowableRail.java trunk/x10.runtime/src-java/x10/core/Rail.java trunk/x10.runtime/src-java/x10/core/RailFactory.java trunk/x10.runtime/src-java/x10/core/Ref.java trunk/x10.runtime/src-java/x10/core/Settable.java trunk/x10.runtime/src-java/x10/core/Struct.java trunk/x10.runtime/src-java/x10/core/ValRail.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_0.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_1.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_2.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_3.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_4.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_5.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_6.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_7.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_8.java trunk/x10.runtime/src-java/x10/core/fun/Fun_0_9.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_0.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_1.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_2.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_3.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_4.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_5.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_6.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_7.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_8.java trunk/x10.runtime/src-java/x10/core/fun/VoidFun_0_9.java trunk/x10.runtime/src-java/x10/rtt/BooleanType.java trunk/x10.runtime/src-java/x10/rtt/ByteType.java trunk/x10.runtime/src-java/x10/rtt/CharType.java trunk/x10.runtime/src-java/x10/rtt/DoubleType.java trunk/x10.runtime/src-java/x10/rtt/FloatType.java trunk/x10.runtime/src-java/x10/rtt/IntType.java trunk/x10.runtime/src-java/x10/rtt/LongType.java trunk/x10.runtime/src-java/x10/rtt/RuntimeType.java trunk/x10.runtime/src-java/x10/rtt/ShortType.java trunk/x10.runtime/src-java/x10/rtt/Type.java trunk/x10.runtime/src-java/x10/rtt/UByteType.java trunk/x10.runtime/src-java/x10/rtt/UIntType.java trunk/x10.runtime/src-java/x10/rtt/ULongType.java trunk/x10.runtime/src-java/x10/rtt/UShortType.java trunk/x10.runtime/src-x10/x10/lang/Rail.x10 trunk/x10.runtime/src-x10/x10/lang/ValRail.x10 Added Paths: ----------- trunk/x10.runtime/src-java/x10/rtt/ParameterizedType.java trunk/x10.runtime/src-java/x10/rtt/UnresolvedType.java Modified: trunk/x10.compiler/src/x10/emitter/Emitter.java =================================================================== --- trunk/x10.compiler/src/x10/emitter/Emitter.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.compiler/src/x10/emitter/Emitter.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -37,7 +37,6 @@ import polyglot.ast.Instanceof; import polyglot.ast.Lit; import polyglot.ast.Local; -import polyglot.ast.New; import polyglot.ast.Node; import polyglot.ast.NodeFactory; import polyglot.ast.Receiver; @@ -72,8 +71,6 @@ import x10.ast.ClosureCall; import x10.ast.ParExpr_c; import x10.ast.TypeParamNode; -import x10.ast.X10Cast; -import x10.ast.X10Cast_c; import x10.ast.X10ClockedLoop; import x10.ast.X10MethodDecl_c; import x10.constraint.XAnd_c; @@ -127,7 +124,10 @@ "class", "float", "native", "super", "while", "const", "for", "new", "switch", "continue", "goto", "package", "synchronized", - "null", "true", "false" + "null", "true", "false", + + // X10 implementation names + "getRTT", "_RTT", "getParam" } ) ); @@ -1927,4 +1927,156 @@ s.append("]"); return s.toString(); } + + public void generateRTTInstance(X10ClassDef def) { + + w.write("public static final x10.rtt.RuntimeType<"); + printType(def.asType(), X10PrettyPrinterVisitor.BOX_PRIMITIVES); + w.write(">"); + w.write("_RTT = new x10.rtt.RuntimeType<"); + printType(def.asType(), X10PrettyPrinterVisitor.BOX_PRIMITIVES); + w.write(">("); + w.newline(); + w.write("/* base class */"); + printType(def.asType(), X10PrettyPrinterVisitor.BOX_PRIMITIVES); + w.write(".class"); + + for (int i = 0; i < def.variances().size(); i ++) { + w.write(", "); + w.newline(); + if (i == 0) w.write("/* variances */ new x10.rtt.RuntimeType.Variance[] {"); + ParameterType.Variance v = def.variances().get(i); + switch (v) { + case INVARIANT: + w.write("x10.rtt.RuntimeType.Variance.INVARIANT"); + break; + case COVARIANT: + w.write("x10.rtt.RuntimeType.Variance.COVARIANT"); + break; + case CONTRAVARIANT: + w.write("x10.rtt.RuntimeType.Variance.CONTRAVARIANT"); + break; + } + if (i == def.variances().size() - 1) w.write("}"); + } + w.newline(); + + if (def.interfaces().size() > 0 || def.superType() != null) { + w.write(", "); + w.write("/* parents */ new x10.rtt.Type[] {"); + for (int i = 0 ; i < def.interfaces().size(); i ++) { + if (i != 0) w.write(", "); + Type type = def.interfaces().get(i).get(); + printParents(def, type); + } + if (def.superType() != null) { + if (def.interfaces().size() != 0) w.write(", "); + printParents(def, def.superType().get()); + } + w.write("}"); + } + w.newline(); + + w.write(");"); + w.newline(); + + + if (!def.flags().isInterface()) { + + w.write("public x10.rtt.RuntimeType getRTT() {"); + w.write("return _RTT;"); + w.write("}"); + w.newline(); + w.newline(); + + if (!def.typeParameters().isEmpty()) { + w.write("public x10.rtt.Type getParam(int i) {"); + for (int i = 0; i < def.typeParameters().size(); i++) { + ParameterType pt = def.typeParameters().get(i); + w.write("if (i ==" + i + ")"); + w.write("return "); + w.write(Emitter.mangleToJava(pt.name())); + w.write(";"); + } + w.write("return null;"); + w.write("}"); + } + w.newline(); + } + } + + private void printParents(X10ClassDef def, Type type) { + if (type instanceof ConstrainedType_c) { + type = ((ConstrainedType_c) type).baseType().get(); + } + if (type instanceof X10ClassType) { + X10ClassType x10Type = (X10ClassType) type; + if (x10Type.typeArguments().size() > 0) { + for (int i = 0; i < x10Type.typeArguments().size(); i++) { + if (i == 0) { + w.write("new x10.rtt.ParameterizedType("); + if (x10Type instanceof FunctionType) { + FunctionType ft = (FunctionType) x10Type; + List<Type> args = ft.argumentTypes(); + Type ret = ft.returnType(); + if (ret.isVoid()) { + w.write("x10.core.fun.VoidFun"); + } else { + w.write("x10.core.fun.Fun"); + } + w.write("_" + ft.typeParameters().size()); + w.write("_" + args.size()); + w.write("._RTT"); + } + else { + X10ClassDef cd = x10Type.x10Def(); + String pat = getJavaRTTRep(cd); + if (pat != null) { + // Check for @NativeRep with null RTT class + Object[] components = new Object[1 + x10Type.typeArguments().size() * 2]; + int j = 0; + components[j++] = new TypeExpander(this, x10Type, X10PrettyPrinterVisitor.PRINT_TYPE_PARAMS | X10PrettyPrinterVisitor.BOX_PRIMITIVES); + for (Type at : x10Type.typeArguments()) { + components[j++] = new TypeExpander(this, at, X10PrettyPrinterVisitor.PRINT_TYPE_PARAMS | X10PrettyPrinterVisitor.BOX_PRIMITIVES); + components[j++] = new RuntimeTypeExpander(this, at); + } + dumpRegex("Native", components, tr, pat); + } + else if (getJavaRep(cd) != null) { + w.write("(x10.rtt.RuntimeType) "); + w.write("x10.rtt.Types.runtimeType("); + printType(x10Type, 0); + w.write(".class"); + w.write(")"); + } + else { + w.write(x10Type.def().fullName() + "._RTT"); + } + } + } + w.write(", "); + Type ta = x10Type.typeArguments().get(i); + if (ta instanceof ParameterType) { + w.write("new x10.rtt.UnresolvedType("); + w.write("" + getIndex(def.typeParameters(), (ParameterType) ta)); + w.write(")"); + } else { + printParents(def, ta); + } + if (i == x10Type.typeArguments().size() - 1) w.write(")"); + } + } else { + new RuntimeTypeExpander(this, x10Type).expand(tr); + } + } + } + + private int getIndex(List<ParameterType> pts, ParameterType t) { + for (int i = 0; i < pts.size(); i ++) { + if (pts.get(i).name().equals(t.name())) { + return i; + } + } + throw new InternalCompilerError(""); // TODO + } } Modified: trunk/x10.compiler/src/x10/emitter/RuntimeTypeExpander.java =================================================================== --- trunk/x10.compiler/src/x10/emitter/RuntimeTypeExpander.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.compiler/src/x10/emitter/RuntimeTypeExpander.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -15,9 +15,8 @@ import polyglot.types.Type; import polyglot.visit.Translator; -import x10.constraint.XConstraint; -import x10.types.FunctionType; import x10.types.ConstrainedType; +import x10.types.FunctionType; import x10.types.ParameterType; import x10.types.X10ClassDef; import x10.types.X10ClassType; @@ -25,14 +24,12 @@ import x10.visit.X10PrettyPrinterVisitor; final public class RuntimeTypeExpander extends Expander { - /** - * - */ - private final Type at; + private final Type at; + public RuntimeTypeExpander(Emitter er, Type at) { - super(er); - if (at instanceof X10ClassType) { + super(er); + if (at instanceof X10ClassType) { X10ClassType ct = (X10ClassType) at; if (ct.isAnonymous()) { @@ -70,27 +67,24 @@ FunctionType ct = (FunctionType) at; List<Type> args = ct.argumentTypes(); Type ret = ct.returnType(); - er.w.write("new "); - if (ret.isVoid()) { - er.w.write("x10.core.fun.VoidFun"); + + // XTENLANG-1102 + if (args.size() > 0) { + er.w.write("new x10.rtt.ParameterizedType("); + printFunRTT(ct, args, ret); + for (Type a:args) { + er.w.write(","); + new RuntimeTypeExpander(er, a).expand(tr); + } + if (!ret.isVoid()) { + er.w.write(","); + new RuntimeTypeExpander(er, ret).expand(tr); + } + er.w.write(")"); } else { - er.w.write("x10.core.fun.Fun"); + printFunRTT(ct, args, ret); } - er.w.write("_" + ct.typeParameters().size()); - er.w.write("_" + args.size()); - er.w.write(".RTT("); - String sep = ""; - for (Type a : args) { - er.w.write(sep); - sep = ","; - new RuntimeTypeExpander(er, a).expand(tr); - } - if (! ret.isVoid()) { - er.w.write(sep); - new RuntimeTypeExpander(er, ret).expand(tr); - } - er.w.write(")"); return; } @@ -109,26 +103,14 @@ } if (pat == null) { + // XTENLANG-1102 if (ct.isGloballyAccessible() && ct.typeArguments().size() == 0) { - er.w.write(er.rttName(cd)); - er.w.write(".it"); - } - else { - er.w.write("new "); - er.w.write(er.rttName(cd)); - - er.w.write("<"); + er.w.write(cd.fullName().toString() + "." + "_RTT"); + } else { + er.w.write("new x10.rtt.ParameterizedType("); + er.w.write(cd.fullName().toString() + "." + "_RTT"); for (int i = 0; i < ct.typeArguments().size(); i++) { - if (i != 0) - er.w.write(", "); - new TypeExpander(er, ct.typeArguments().get(i), X10PrettyPrinterVisitor.PRINT_TYPE_PARAMS | X10PrettyPrinterVisitor.BOX_PRIMITIVES).expand(tr); - } - er.w.write(">"); - - er.w.write("("); - for (int i = 0; i < ct.typeArguments().size(); i++) { - if (i != 0) - er.w.write(", "); + er.w.write(", "); new RuntimeTypeExpander(er, ct.typeArguments().get(i)).expand(tr); } er.w.write(")"); @@ -172,6 +154,17 @@ er.w.write(")"); } + private void printFunRTT(FunctionType ct, List<Type> args, Type ret) { + if (ret.isVoid()) { + er.w.write("x10.core.fun.VoidFun"); + } else { + er.w.write("x10.core.fun.Fun"); + } + er.w.write("_" + ct.typeParameters().size()); + er.w.write("_" + args.size()); + er.w.write("._RTT"); + } + String typeof(Type t) { if (t.isBoolean()) return "x10.rtt.Types.BOOLEAN"; Modified: trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java =================================================================== --- trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -14,8 +14,11 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; +import java.util.Set; import polyglot.ast.Assign; import polyglot.ast.Binary; @@ -47,6 +50,7 @@ import polyglot.ast.TypeNode; import polyglot.ast.Unary; import polyglot.ast.Unary_c; +import polyglot.types.ClassDef; import polyglot.types.FieldDef; import polyglot.types.Flags; import polyglot.types.LocalDef; @@ -117,6 +121,7 @@ import x10.emitter.Template; import x10.emitter.TryCatchExpander; import x10.emitter.TypeExpander; +import x10.types.FunctionType; import x10.types.ParameterType; import x10.types.X10ClassDef; import x10.types.X10ClassType; @@ -569,13 +574,16 @@ // Generate the run-time type. We have to wrap in a class since n might be an interface // and interfaces can't have static methods. - er.generateRTTMethods(def); +// er.generateRTTMethods(def); // boolean isValueType = xts.isValueType(def.asType(), (X10Context) tr.context()); - if (def.isTopLevel()) { - er.generateRTType(def); - } - +// if (def.isTopLevel()) { +// er.generateRTType(def); +// } + + // XTENLANG-1102 + er.generateRTTInstance(def); + // Generate dispatcher methods. er.generateDispatchers(def); @@ -854,10 +862,51 @@ return; } - new RuntimeTypeExpander(er, t).expand(tr); - w.write("."); + // XTENLANG-1102 + if (t instanceof X10ClassType) { + X10ClassType ct = (X10ClassType) t; + X10ClassDef cd = ct.x10Def(); + String pat = er.getJavaRTTRep(cd); + + if (t instanceof FunctionType) { + FunctionType ft = (FunctionType) t; + List<Type> args = ft.argumentTypes(); + Type ret = ft.returnType(); + if (ret.isVoid()) { + w.write("x10.core.fun.VoidFun"); + } else { + w.write("x10.core.fun.Fun"); + } + w.write("_" + ft.typeParameters().size()); + w.write("_" + args.size()); + w.write("._RTT"); + } + else if (pat == null && er.getJavaRep(cd) == null && ct.isGloballyAccessible() && ct.typeArguments().size() != 0) { + w.write(cd.fullName().toString() + "." + "_RTT"); + } + else { + new RuntimeTypeExpander(er, t).expand(tr); + } + } else { + new RuntimeTypeExpander(er, t).expand(tr); + } + + w.write("."); w.write("instanceof$("); tr.print(c, c.expr(), w); + + if (t instanceof X10ClassType) { + X10ClassType ct = (X10ClassType) t; + X10ClassDef cd = ct.x10Def(); + String pat = er.getJavaRTTRep(cd); + + for (int i = 0; i < ct.typeArguments().size(); i++) { + w.write(", "); +// if (i == 0) w.write("new x10.rtt.Type[] {"); + new RuntimeTypeExpander(er, ct.typeArguments().get(i)).expand(tr); +// if (i == ct.typeArguments().size() - 1 ) w.write("}"); + } + } w.write(")"); } @@ -1302,11 +1351,60 @@ w.write("}"); w.newline(); - Type t = n.type(); - t = X10TypeMixin.baseType(t); - if (t instanceof X10ClassType) { - X10ClassType ct = (X10ClassType) t; - er.generateRTTMethods(ct.x10Def()); + Type type = n.type(); + type = X10TypeMixin.baseType(type); + if (type instanceof X10ClassType) { + X10ClassType ct = (X10ClassType) type; + X10ClassDef def = ct.x10Def(); + + // XTENLANG-1102 + Set<ClassDef> visited = new HashSet<ClassDef>(); + + visited = new HashSet<ClassDef>(); + visited.add(def); + if (!def.flags().isInterface()) { + List<Type> types = new ArrayList<Type>(); + LinkedList<Type> worklist = new LinkedList<Type>(); + for (Type t : def.asType().interfaces()) { + Type it = X10TypeMixin.baseType(t); + worklist.add(it); + } + while (!worklist.isEmpty()) { + Type it = worklist.removeFirst(); + if (it instanceof X10ClassType) { + X10ClassType ct2 = (X10ClassType) it; + X10ClassDef idef = ct2.x10Def(); + + if (visited.contains(idef)) + continue; + visited.add(idef); + + for (Type t : ct2.interfaces()) { + Type it2 = X10TypeMixin.baseType(t); + worklist.add(it2); + } + + types.addAll(ct2.typeArguments()); + } + } + if (types.size() > 0) { + w.write("public x10.rtt.RuntimeType<?> getRTT() { return _RTT;}"); + w.write("public x10.rtt.Type<?> getParam(int i) {"); + for (int i = 0; i < types.size(); i++) { + w.write("if (i ==" + i + ")"); + Type t = types.get(i); + w.write(" return "); + new RuntimeTypeExpander(er, t).expand(); + w.write(";"); + } + w.write("return null;"); + w.newline(); + w.write("}"); + w.newline(); + } else { + + } + } } w.write("}"); Modified: trunk/x10.runtime/src-java/x10/core/Any.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Any.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/Any.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -16,16 +16,7 @@ // Base interface of all X10 entities. public interface Any { - public static class RTT extends RuntimeType<Any> { - public static final RTT it = new RTT(); - - public RTT() { - super(Any.class); - } - - @Override - public boolean instanceof$(Object o) { - return true; - } - } + public static RuntimeType<Any> _RTT = new RuntimeType<Any>(Any.class); + public RuntimeType<?> getRTT(); + public Type<?> getParam(int i); } Modified: trunk/x10.runtime/src-java/x10/core/AnyRail.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/AnyRail.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/AnyRail.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,17 +11,11 @@ package x10.core; -import x10.core.Iterator; -import x10.core.Iterable; import x10.core.fun.Fun_0_1; -import x10.rtt.Type; public interface AnyRail<T> extends Indexable<Integer,T>, Fun_0_1<Integer,T>, Iterable<T> { - public Iterator<T> iterator(); + public Iterator<T> iterator(); - public Type<?> rtt_x10$lang$Fun_0_1_Z1(); - public Type<?> rtt_x10$lang$Fun_0_1_U(); - // Methods to get the backing array. May be called by generated code. public Object getBackingArray(); Modified: trunk/x10.runtime/src-java/x10/core/GrowableRail.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/GrowableRail.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/GrowableRail.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -13,10 +13,10 @@ import x10.core.fun.Fun_0_1; +import x10.rtt.RuntimeType; import x10.rtt.Type; import x10.rtt.Types; -import x10.core.Iterable; -import x10.core.Iterator; +import x10.rtt.RuntimeType.Variance; public class GrowableRail<T> extends Ref implements Fun_0_1<Integer,T>, Settable<Integer, T>, Iterable<T> { private Type<T> elementType; @@ -145,35 +145,9 @@ // // Runtime type information // - - static public class RTT extends x10.rtt.RuntimeType<GrowableRail<?>> { - Type<?> type; - - public RTT(Type<?> type) { - super(GrowableRail.class); - this.type = type; - } - - public boolean instanceof$(java.lang.Object o) { - if (!(o instanceof GrowableRail)) - return false; - GrowableRail r = (GrowableRail) o; - if (! r.elementType.equals(type)) // covariant - return false; - return true; - } - - - public boolean isSubtype(Type<?> type) { - if (type instanceof GrowableRail.RTT) { - GrowableRail.RTT r = (GrowableRail.RTT) type; - return r.type.equals(this.type); - } -// if (type instanceof Fun_0_1.RTT) { -// Fun_0_1.RTT r = (Fun_0_1.RTT) type; -// return r.I.equals(Types.INT) && r.V.equals(this.type); -// } - return false; - } + public static final RuntimeType<GrowableRail<?>> _RTT = new RuntimeType(GrowableRail.class, Variance.INVARIANT); + public RuntimeType<GrowableRail<?>> getRTT() {return _RTT;} + public Type<?> getParam(int i) { + return i == 0 ? elementType : null; } } Modified: trunk/x10.runtime/src-java/x10/core/Rail.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Rail.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/Rail.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -12,8 +12,12 @@ package x10.core; import x10.core.fun.Fun_0_1; +import x10.rtt.ParameterizedType; +import x10.rtt.RuntimeType; import x10.rtt.Type; import x10.rtt.Types; +import x10.rtt.UnresolvedType; +import x10.rtt.RuntimeType.Variance; public final class Rail<T> extends Ref implements AnyRail<T>, Settable<Integer,T> { public final int length; @@ -155,51 +159,23 @@ // + public ValRail<T> view() { + return new ValRail<T>(type, this); + } // // Runtime type information // - - static public class RTT<T> extends x10.rtt.RuntimeType<Rail<T>> { - Type<T> type; - - public RTT(Type<T> type) { - super(Rail.class); - this.type = type; + public static final RuntimeType<Rail> _RTT = new RuntimeType<Rail>( + Rail.class, + new Variance[] {Variance.INVARIANT}, + new Type<?>[] { + new ParameterizedType(Fun_0_1._RTT, Types.INT, new UnresolvedType(0)), + new ParameterizedType(Settable._RTT, Types.INT, new UnresolvedType(0)) } - - public boolean instanceof$(java.lang.Object o) { - if (!(o instanceof Rail)) - return false; - Rail r = (Rail) o; - if (! r.type.equals(type)) // invariant - return false; - return true; - } - - public boolean isSubtype(Type<?> type) { - if (type instanceof Rail.RTT) { - Rail.RTT r = (Rail.RTT) type; - return r.type.equals(this.type); - } -// if (type instanceof Fun_0_1.RTT) { -// Fun_0_1.RTT r = (Fun_0_1.RTT) type; -// return r.I.equals(Types.INT) && r.V.equals(this.type); -// } -// if (type instanceof Settable.RTT) { -// Settable.RTT r = (Settable.RTT) type; -// return r.I.equals(Types.INT) && r.V.equals(this.type); -// } - return false; - } + ); + public RuntimeType<Rail> getRTT() {return _RTT;} + public Type<?> getParam(int i) { + return i == 0 ? type : null; } - - public Type<?> rtt_x10$lang$Fun_0_1_Z1() { return Types.INT; } - public Type<?> rtt_x10$lang$Fun_0_1_U() { return type; } - public Type<?> rtt_x10$lang$Settable_I() { return Types.INT; } - public Type<?> rtt_x10$lang$Settable_V() { return type; } - - public ValRail<T> view() { - return new ValRail<T>(type, this); - } } Modified: trunk/x10.runtime/src-java/x10/core/RailFactory.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/RailFactory.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/RailFactory.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -17,7 +17,7 @@ import x10.rtt.Types; public class RailFactory { - public static <T> ValRail<T> makeValRail(Type<T> type, int length, Fun_0_1<Integer,T> init) { + public static <T> ValRail<T> makeValRail(Type type, int length, Fun_0_1<Integer,T> init) { Object o = type.makeArray(length); for (int i = 0; i < length; i++) { type.setArray(o, i, init.apply(i)); @@ -26,7 +26,7 @@ return array; } - public static <T> Rail<T> makeVarRail(Type<T> type, int length, Fun_0_1<Integer,T> init) { + public static <T> Rail<T> makeVarRail(Type type, int length, Fun_0_1<Integer,T> init) { Rail<T> array = new Rail<T>(type, length); for (int i = 0; i < length; i++) { array.set(init.apply(i), i); @@ -34,19 +34,19 @@ return array; } - public static <T> ValRail<T> makeValRail(Type<T> type, int length) { + public static <T> ValRail<T> makeValRail(Type type, int length) { Object o = type.makeArray(length); ValRail<T> array = new ValRail<T>(type, length, o); - T zero = type.zeroValue(); + T zero = (T) type.zeroValue(); for (int i = 0; i < length; i++) { type.setArray(o, i, zero); } return array; } - public static <T> Rail<T> makeVarRail(Type<T> type, int length) { + public static <T> Rail<T> makeVarRail(Type type, int length) { Rail<T> array = new Rail<T>(type, length); - T zero = type.zeroValue(); + T zero = (T) type.zeroValue(); for (int i = 0; i < length; i++) { array.set(zero, i); } Modified: trunk/x10.runtime/src-java/x10/core/Ref.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Ref.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/Ref.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -12,6 +12,7 @@ package x10.core; import x10.rtt.RuntimeType; +import x10.rtt.Type; import x10.runtime.impl.java.Thread; @@ -31,22 +32,7 @@ public boolean equals(Object o) { return this == o; } - - - public static class RTT extends RuntimeType<Ref> { - public static final RTT it = new RTT(); - - public RTT() { - super(Ref.class); - } - - @Override - public boolean instanceof$(Object o) { - return o instanceof Ref; - } - } - public Ref box$() { return this; } @@ -88,8 +74,18 @@ return Thread.currentThread().home(); } } + public static String typeName(Object obj) { - String s = obj.getClass().toString().substring(6); // drop the beginning "class " + String s; + if (obj instanceof Any) { + s = ((Any) obj).getRTT().typeName(obj); + } else { + s = obj.getClass().toString().substring(6); + } return s.equals("java.lang.Object") ? "x10.lang.Object" : s; } + + public static RuntimeType<Ref> _RTT = new RuntimeType<Ref>(Ref.class); + public RuntimeType getRTT() {return _RTT;} + public Type<?> getParam(int i) {return null;} } Modified: trunk/x10.runtime/src-java/x10/core/Settable.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Settable.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/Settable.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,6 +11,10 @@ package x10.core; +import x10.rtt.RuntimeType; +import x10.rtt.RuntimeType.Variance; + public interface Settable<D,R> { + public static RuntimeType _RTT = new RuntimeType(Settable.class, new Variance[]{Variance.CONTRAVARIANT, Variance.INVARIANT}); R set(R v, D i); } Modified: trunk/x10.runtime/src-java/x10/core/Struct.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Struct.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/Struct.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -22,20 +22,6 @@ // Base class for all X10 structs public abstract class Struct implements Any { - public static class RTT extends RuntimeType<Struct> { - public static final RTT it = new RTT(); - - public RTT() { - super(Struct.class); - } - - @Override - public boolean instanceof$(Object o) { - return o instanceof Struct; - } - - } - public Struct() {} public final boolean structEquals(Object o) { @@ -87,4 +73,8 @@ } return true; } + + public static final RuntimeType<Struct> _RTT = new RuntimeType<Struct>(Struct.class); + public RuntimeType getRTT() {return _RTT;} + public Type<?> getParam(int i) {return null;} } Modified: trunk/x10.runtime/src-java/x10/core/ValRail.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/ValRail.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/ValRail.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -12,8 +12,12 @@ package x10.core; import x10.core.fun.Fun_0_1; +import x10.rtt.ParameterizedType; +import x10.rtt.RuntimeType; import x10.rtt.Type; import x10.rtt.Types; +import x10.rtt.UnresolvedType; +import x10.rtt.RuntimeType.Variance; public final class ValRail<T> implements AnyRail<T> { public final int length; @@ -163,38 +167,17 @@ // // Runtime type information // - - static public class RTT<T> extends x10.rtt.RuntimeType<ValRail<T>> { - Type<T> type; - - public RTT(Type<T> type) { - super(ValRail.class); - this.type = type; - } - public boolean instanceof$(java.lang.Object o) { - if (!(o instanceof ValRail)) - return false; - ValRail r = (ValRail) o; - if (! r.type.isSubtype(type)) // covariant - return false; - return true; - } - - - public boolean isSubtype(Type<?> type) { - if (type instanceof ValRail.RTT) { - ValRail.RTT r = (ValRail.RTT) type; - return r.type.equals(this.type); - } -// if (type instanceof Fun_0_1.RTT) { -// Fun_0_1.RTT r = (Fun_0_1.RTT) type; -// return r.I.equals(Types.INT) && r.V.equals(this.type); -// } - return false; - } + public static final RuntimeType _RTT = new RuntimeType( + ValRail.class, + new Variance[] {Variance.COVARIANT}, + new Type<?>[] {new ParameterizedType(Fun_0_1._RTT, Types.INT, new UnresolvedType(0))} + ); + + public RuntimeType<?> getRTT() { + return _RTT; } - - public Type<?> rtt_x10$lang$Fun_0_1_Z1() { return Types.INT; } - public Type<?> rtt_x10$lang$Fun_0_1_U() { return type; } + public Type<?> getParam(int i) { + return i == 0 ? type : null; + } } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_0.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_0.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_0.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,40 +11,16 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_0<U> { +public interface Fun_0_0<U> extends Any { U apply(); - Type<?> rtt_x10$lang$Fun_0_0_U(); - - public static class RTT extends RuntimeType<Fun_0_0<?>>{ - Type<?> U; - - public RTT(Type<?> U) { - super(Fun_0_0.class); - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_0<?>) { - Fun_0_0<?> v = (Fun_0_0<?>) o; - return v.rtt_x10$lang$Fun_0_0_U().isSubtype(U); // covariant - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_0.RTT) { - Fun_0_0.RTT t = (RTT) o; - return U.isSubtype(t.U); - } - return false; - } - } + + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_0.class, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_1.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_1.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_1.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,44 +11,17 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_1<T1,U> { +public interface Fun_0_1<T1,U> extends Any { U apply(T1 o); - Type<?> rtt_x10$lang$Fun_0_1_Z1(); - Type<?> rtt_x10$lang$Fun_0_1_U(); - - public static class RTT extends RuntimeType<Fun_0_1<?,?>>{ - Type<?> T1; - Type<?> U; - - public RTT(Type<?> T1, Type<?> U) { - super(Fun_0_1.class); - this.T1 = T1; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_1<?,?>) { - Fun_0_1<?,?> v = (Fun_0_1<?,?>) o; - if (! v.rtt_x10$lang$Fun_0_1_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_1_Z1())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_1.RTT) { - Fun_0_1.RTT t = (RTT) o; - return U.isSubtype(t.U) && t.T1.isSubtype(T1); - } - return false; - } - } + + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_1.class, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_2.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_2.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_2.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,48 +11,17 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_2<T1,T2,U> { +public interface Fun_0_2<T1,T2,U> extends Any { U apply(T1 o1, T2 o2); - Type<?> rtt_x10$lang$Fun_0_2_Z1(); - Type<?> rtt_x10$lang$Fun_0_2_Z2(); - Type<?> rtt_x10$lang$Fun_0_2_U(); - - public static class RTT extends RuntimeType<Fun_0_2<?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> U) { - super(Fun_0_2.class); - this.T1 = T1; - this.T2 = T2; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_2) { - Fun_0_2<?,?,?> v = (Fun_0_2<?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_2_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_2_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_2_Z2())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_2.RTT) { - Fun_0_2.RTT t = (RTT) o; - return U.isSubtype(t.U) && t.T1.isSubtype(T1) && t.T2.isSubtype(T2); - } - return false; - } - } + + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_2.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_3.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_3.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_3.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,52 +11,18 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_3<T1,T2,T3,U> { +public interface Fun_0_3<T1,T2,T3,U> extends Any { U apply(T1 o1, T2 o2, T3 o3); - Type<?> rtt_x10$lang$Fun_0_3_Z1(); - Type<?> rtt_x10$lang$Fun_0_3_Z2(); - Type<?> rtt_x10$lang$Fun_0_3_Z3(); - Type<?> rtt_x10$lang$Fun_0_3_U(); - - public static class RTT extends RuntimeType<Fun_0_3<?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> U) { - super(Fun_0_3.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_3) { - Fun_0_3<?,?,?,?> v = (Fun_0_3<?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_3_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_3_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_3_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_3_Z3())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_3.RTT) { - Fun_0_3.RTT t = (RTT) o; - return U.isSubtype(t.U) && t.T1.isSubtype(T1) && t.T2.isSubtype(T2) && t.T3.isSubtype(T3); - } - return false; - } - } + + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_3.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_4.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_4.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_4.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,60 +11,19 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_4<T1,T2,T3,T4,U> { +public interface Fun_0_4<T1,T2,T3,T4,U> extends Any { U apply(T1 o1, T2 o2, T3 o3, T4 o4); - Type<?> rtt_x10$lang$Fun_0_4_Z1(); - Type<?> rtt_x10$lang$Fun_0_4_Z2(); - Type<?> rtt_x10$lang$Fun_0_4_Z3(); - Type<?> rtt_x10$lang$Fun_0_4_Z4(); - Type<?> rtt_x10$lang$Fun_0_4_U(); - - public static class RTT extends RuntimeType<Fun_0_4<?,?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> T4; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> T4, Type<?> U) { - super(Fun_0_4.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.T4 = T4; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_4) { - Fun_0_4<?,?,?,?,?> v = (Fun_0_4<?,?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_4_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_4_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_4_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_4_Z3())) return false; // contravariant - if (! T4.isSubtype(v.rtt_x10$lang$Fun_0_4_Z4())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_4.RTT) { - Fun_0_4.RTT t = (RTT) o; - return U.isSubtype(t.U) - && t.T1.isSubtype(T1) - && t.T2.isSubtype(T2) - && t.T3.isSubtype(T3) - && t.T4.isSubtype(T4); - } - return false; - } - } + + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_4.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_5.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_5.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_5.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,65 +11,21 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_5<T1,T2,T3,T4,T5,U> { +public interface Fun_0_5<T1,T2,T3,T4,T5,U> extends Any { U apply(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5); - Type<?> rtt_x10$lang$Fun_0_5_Z1(); - Type<?> rtt_x10$lang$Fun_0_5_Z2(); - Type<?> rtt_x10$lang$Fun_0_5_Z3(); - Type<?> rtt_x10$lang$Fun_0_5_Z4(); - Type<?> rtt_x10$lang$Fun_0_5_Z5(); - Type<?> rtt_x10$lang$Fun_0_5_U(); - public static class RTT extends RuntimeType<Fun_0_5<?,?,?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> T4; - Type<?> T5; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> T4, Type<?> T5, Type<?> U) { - super(Fun_0_5.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.T4 = T4; - this.T5 = T5; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_5) { - Fun_0_5<?,?,?,?,?,?> v = (Fun_0_5<?,?,?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_5_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_5_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_5_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_5_Z3())) return false; // contravariant - if (! T4.isSubtype(v.rtt_x10$lang$Fun_0_5_Z4())) return false; // contravariant - if (! T5.isSubtype(v.rtt_x10$lang$Fun_0_5_Z5())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_5.RTT) { - Fun_0_5.RTT t = (RTT) o; - return U.isSubtype(t.U) - && t.T1.isSubtype(T1) - && t.T2.isSubtype(T2) - && t.T3.isSubtype(T3) - && t.T4.isSubtype(T4) - && t.T5.isSubtype(T5); - } - return false; - } - } + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_5.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_6.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_6.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_6.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,70 +11,21 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_6<T1,T2,T3,T4,T5,T6,U> { +public interface Fun_0_6<T1,T2,T3,T4,T5,T6,U> extends Any { U apply(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5, T6 o6); - Type<?> rtt_x10$lang$Fun_0_6_Z1(); - Type<?> rtt_x10$lang$Fun_0_6_Z2(); - Type<?> rtt_x10$lang$Fun_0_6_Z3(); - Type<?> rtt_x10$lang$Fun_0_6_Z4(); - Type<?> rtt_x10$lang$Fun_0_6_Z5(); - Type<?> rtt_x10$lang$Fun_0_6_Z6(); - Type<?> rtt_x10$lang$Fun_0_6_U(); - public static class RTT extends RuntimeType<Fun_0_6<?,?,?,?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> T4; - Type<?> T5; - Type<?> T6; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> T4, Type<?> T5, Type<?> T6, Type<?> U) { - super(Fun_0_6.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.T4 = T4; - this.T5 = T5; - this.T6 = T6; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_6) { - Fun_0_6<?,?,?,?,?,?,?> v = (Fun_0_6<?,?,?,?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_6_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_6_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_6_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_6_Z3())) return false; // contravariant - if (! T4.isSubtype(v.rtt_x10$lang$Fun_0_6_Z4())) return false; // contravariant - if (! T5.isSubtype(v.rtt_x10$lang$Fun_0_6_Z5())) return false; // contravariant - if (! T6.isSubtype(v.rtt_x10$lang$Fun_0_6_Z6())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_6.RTT) { - Fun_0_6.RTT t = (RTT) o; - return U.isSubtype(t.U) - && t.T1.isSubtype(T1) - && t.T2.isSubtype(T2) - && t.T3.isSubtype(T3) - && t.T4.isSubtype(T4) - && t.T5.isSubtype(T5) - && t.T6.isSubtype(T6); - } - return false; - } - } + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_6.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_7.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_7.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_7.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,75 +11,21 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_7<T1,T2,T3,T4,T5,T6,T7,U> { +public interface Fun_0_7<T1,T2,T3,T4,T5,T6,T7,U> extends Any { U apply(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5, T6 o6, T7 o7); - Type<?> rtt_x10$lang$Fun_0_7_Z1(); - Type<?> rtt_x10$lang$Fun_0_7_Z2(); - Type<?> rtt_x10$lang$Fun_0_7_Z3(); - Type<?> rtt_x10$lang$Fun_0_7_Z4(); - Type<?> rtt_x10$lang$Fun_0_7_Z5(); - Type<?> rtt_x10$lang$Fun_0_7_Z6(); - Type<?> rtt_x10$lang$Fun_0_7_Z7(); - Type<?> rtt_x10$lang$Fun_0_7_U(); - - public static class RTT extends RuntimeType<Fun_0_7<?,?,?,?,?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> T4; - Type<?> T5; - Type<?> T6; - Type<?> T7; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> T4, Type<?> T5, Type<?> T6, Type<?> T7, Type<?> U) { - super(Fun_0_7.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.T4 = T4; - this.T5 = T5; - this.T6 = T6; - this.T7 = T7; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_7) { - Fun_0_7<?,?,?,?,?,?,?,?> v = (Fun_0_7<?,?,?,?,?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_7_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_7_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_7_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_7_Z3())) return false; // contravariant - if (! T4.isSubtype(v.rtt_x10$lang$Fun_0_7_Z4())) return false; // contravariant - if (! T5.isSubtype(v.rtt_x10$lang$Fun_0_7_Z5())) return false; // contravariant - if (! T6.isSubtype(v.rtt_x10$lang$Fun_0_7_Z6())) return false; // contravariant - if (! T7.isSubtype(v.rtt_x10$lang$Fun_0_7_Z7())) return false; // contravariant - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_7.RTT) { - Fun_0_7.RTT t = (RTT) o; - return U.isSubtype(t.U) - && t.T1.isSubtype(T1) - && t.T2.isSubtype(T2) - && t.T3.isSubtype(T3) - && t.T4.isSubtype(T4) - && t.T5.isSubtype(T5) - && t.T6.isSubtype(T6) - && t.T7.isSubtype(T7); - } - return false; - } - } + public static final RuntimeType _RTT = new RuntimeType( + Fun_0_7.class, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.CONTRAVARIANT, + Variance.COVARIANT + ); } Modified: trunk/x10.runtime/src-java/x10/core/fun/Fun_0_8.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/fun/Fun_0_8.java 2010-04-15 00:57:16 UTC (rev 13879) +++ trunk/x10.runtime/src-java/x10/core/fun/Fun_0_8.java 2010-04-15 01:27:54 UTC (rev 13880) @@ -11,80 +11,23 @@ package x10.core.fun; +import x10.core.Any; import x10.rtt.RuntimeType; -import x10.rtt.Type; +import x10.rtt.RuntimeType.Variance; -public interface Fun_0_8<T1,T2,T3,T4,T5,T6,T7,T8,U> { +public interface Fun_0_8<T1,T2,T3,T4,T5,T6,T7,T8,U> extends Any { U apply(T1 o1, T2 o2, T3 o3, T4 o4, T5 o5, T6 o6, T7 o7, T8 o8); - Type<?> rtt_x10$lang$Fun_0_8_Z1(); - Type<?> rtt_x10$lang$Fun_0_8_Z2(); - Type<?> rtt_x10$lang$Fun_0_8_Z3(); - Type<?> rtt_x10$lang$Fun_0_8_Z4(); - Type<?> rtt_x10$lang$Fun_0_8_Z5(); - Type<?> rtt_x10$lang$Fun_0_8_Z6(); - Type<?> rtt_x10$lang$Fun_0_8_Z7(); - Type<?> rtt_x10$lang$Fun_0_8_Z8(); - Type<?> rtt_x10$lang$Fun_0_8_U(); - - public static class RTT extends RuntimeType<Fun_0_8<?,?,?,?,?,?,?,?,?>>{ - Type<?> T1; - Type<?> T2; - Type<?> T3; - Type<?> T4; - Type<?> T5; - Type<?> T6; - Type<?> T7; - Type<?> T8; - Type<?> U; - - public RTT(Type<?> T1, Type<?> T2, Type<?> T3, Type<?> T4, Type<?> T5, Type<?> T6, Type<?> T7, Type<?> T8, Type<?> U) { - super(Fun_0_8.class); - this.T1 = T1; - this.T2 = T2; - this.T3 = T3; - this.T4 = T4; - this.T5 = T5; - this.T6 = T6; - this.T7 = T7; - this.T8 = T8; - this.U = U; - } - - @Override - public boolean instanceof$(Object o) { - if (o instanceof Fun_0_8) { - Fun_0_8<?,?,?,?,?,?,?,?,?> v = (Fun_0_8<?,?,?,?,?,?,?,?,?>) o; - if (! v.rtt_x10$lang$Fun_0_8_U().isSubtype(U)) return false; // covariant - if (! T1.isSubtype(v.rtt_x10$lang$Fun_0_8_Z1())) return false; // contravariant - if (! T2.isSubtype(v.rtt_x10$lang$Fun_0_8_Z2())) return false; // contravariant - if (! T3.isSubtype(v.rtt_x10$lang$Fun_0_8_Z3())) return false; // contravariant - if (! T4.isSubtype(v.rtt_x10$lang$Fun_0_8_Z4())) return false; // contravariant - if (! T5.isSubtype(v.rtt_x10$lang$Fun_0_8_Z5())) return false; // contravariant - if (! T6.isSubtype(v.rtt_x10$lang$Fun_0_8_Z6())) return false; // contravariant - if (! T7.isSubtype(v.rtt_x10$lang$Fun_0_8_Z7())) return false; // contravariant - if (! T8.isSubtype(v.rtt_x10$lang$Fun_0_8_Z8())) return false; // contravarian/ - return true; - } - return false; - } - - @Override - public boolean isSubtype(Type<?> o) { - if (! super.isSubtype(o)) - return false; - if (o instanceof Fun_0_8.RTT) { - Fun_0_8.RTT t = (RTT) o; - return U.isSubtype(t.U) - ... [truncated message content] |