From: <mt...@us...> - 2012-09-26 15:58:15
|
Revision: 24670 http://x10.svn.sourceforge.net/x10/?rev=24670&view=rev Author: mtake Date: 2012-09-26 15:58:05 +0000 (Wed, 26 Sep 2012) Log Message: ----------- Expose special dispatcher through Iterator and Sequence (commit as disabled). Modified Paths: -------------- trunk/x10.compiler/src/x10/emitter/Emitter.java trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java Added Paths: ----------- trunk/x10.runtime/src-java/x10/core/Iterator.java trunk/x10.runtime/src-java/x10/core/Sequence.java Modified: trunk/x10.compiler/src/x10/emitter/Emitter.java =================================================================== --- trunk/x10.compiler/src/x10/emitter/Emitter.java 2012-09-26 15:13:37 UTC (rev 24669) +++ trunk/x10.compiler/src/x10/emitter/Emitter.java 2012-09-26 15:58:05 UTC (rev 24670) @@ -940,6 +940,10 @@ private static final String X10_CORE_BITWISE = "x10.core.Bitwise"; public static final QName X10_LANG_REDUCIBLE = QName.make("x10.lang.Reducible"); private static final String X10_CORE_REDUCIBLE = "x10.core.Reducible"; + public static final QName X10_LANG_ITERATOR = QName.make("x10.lang.Iterator"); + private static final String X10_CORE_ITERATOR = "x10.core.Iterator"; + public static final QName X10_LANG_SEQUENCE = QName.make("x10.lang.Sequence"); + private static final String X10_CORE_SEQUENCE = "x10.core.Sequence"; public void printType(Type type, int flags) { boolean printTypeParams = (flags & PRINT_TYPE_PARAMS) != 0; @@ -1041,6 +1045,20 @@ return; } } + else if (fullName.equals(X10_LANG_ITERATOR)) { + //assert typeArguments != null : "Suspicious Iterator without type parameter"; + if (typeArguments != null && typeArguments.size() == 1 && isPrimitive(typeArguments.get(0))) { + w.write(X10_CORE_ITERATOR + "." + specialTypeSuffixForType(typeArguments.get(0))); + return; + } + } + else if (fullName.equals(X10_LANG_SEQUENCE)) { + //assert typeArguments != null : "Suspicious Sequence without type parameter"; + if (typeArguments != null && typeArguments.size() == 1 && isPrimitive(typeArguments.get(0))) { + w.write(X10_CORE_SEQUENCE + "." + specialTypeSuffixForType(typeArguments.get(0))); + return; + } + } } // Print the class name Modified: trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java =================================================================== --- trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java 2012-09-26 15:13:37 UTC (rev 24669) +++ trunk/x10.compiler/src/x10/visit/X10PrettyPrinterVisitor.java 2012-09-26 15:58:05 UTC (rev 24670) @@ -2561,8 +2561,6 @@ MethodDef md = mi.def(); boolean isParamReturnType = md.returnType().get().isParameterType() || instantiatesReturnType; - boolean isSpecialReturnType = isSpecialType(md.returnType().get()); - if (c.nonVirtual()) { Name name = InlineHelper.makeSuperBridgeName(mi.container().toClass().def(), mi.name()); List<MethodInstance> bridges = targetType.toClass().methodsNamed(name); @@ -2574,8 +2572,12 @@ // call // XTENLANG-2993 + // for X10PrettyPrinterVisitor.exposeSpecialDispatcherThroughSpecialInterface // Type returnTypeForDispatcher = md.returnType().get(); Type returnTypeForDispatcher = isPrimitive(mi.returnType()) && isPrimitiveGenericMethod(mi) ? mi.returnType() : md.returnType().get(); + // for X10PrettyPrinterVisitor.exposeSpecialDispatcherThroughSpecialInterface +// boolean isSpecialReturnType = isSpecialType(md.returnType().get()); + boolean isSpecialReturnType = isPrimitive(mi.returnType()) && isPrimitiveGenericMethod(mi) ? true : isSpecialType(md.returnType().get()); er.printMethodName(md, invokeInterface, isDispatchMethod, generateSpecialDispatcher && !generateSpecialDispatcherNotUse, returnTypeForDispatcher, isSpecialReturnType, isParamReturnType); } @@ -4730,20 +4732,35 @@ Name name = mi.name(); List<LocalInstance> formalNames = mi.formalNames(); if (fullName.equals(Emitter.X10_LANG_ARITHMETIC)) { + // dispatch method ($G->$I etc.) if (formalNames != null && formalNames.size() == 1 && (OperatorNames.PLUS.equals(name) || OperatorNames.MINUS.equals(name) || OperatorNames.STAR.equals(name) || OperatorNames.SLASH.equals(name))) return true; } else if (fullName.equals(Emitter.X10_LANG_BITWISE)) { + // dispatch method ($G->$I etc.) if (formalNames != null && formalNames.size() == 1 && (OperatorNames.AMPERSAND.equals(name) || OperatorNames.BAR.equals(name) || OperatorNames.CARET.equals(name))) return true; } else if (fullName.equals(Emitter.X10_LANG_REDUCIBLE)) { + // dispatch method ($G->$I etc.) if (formalNames != null && formalNames.size() == 2 && (OperatorNames.APPLY.equals(name))) return true; } + else if (fullName.equals(Emitter.X10_LANG_ITERATOR)) { + // special return type ($G->$O) + if ((formalNames == null || formalNames.size() == 0) && + ("next".equals(name.toString()))) + return true; + } + else if (fullName.equals(Emitter.X10_LANG_SEQUENCE)) { + // special return type ($G->$O) + if (formalNames != null && formalNames.size() == 1 && + (OperatorNames.APPLY.equals(name))) + return true; + } } return false; } Added: trunk/x10.runtime/src-java/x10/core/Iterator.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Iterator.java (rev 0) +++ trunk/x10.runtime/src-java/x10/core/Iterator.java 2012-09-26 15:58:05 UTC (rev 24670) @@ -0,0 +1,54 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2012. + */ + +package x10.core; + +/* + * special return type for method abstract public x10.lang.Iterator.next():T + */ +public interface Iterator { + public interface x10$lang$Byte extends x10.lang.Iterator<Byte> { + public byte next$O(); + } + public interface x10$lang$Short extends x10.lang.Iterator<Short> { + public short next$O(); + } + public interface x10$lang$Int extends x10.lang.Iterator<Int> { + public int next$O(); + } + public interface x10$lang$Long extends x10.lang.Iterator<Long> { + public long next$O(); + } + public interface x10$lang$Float extends x10.lang.Iterator<Float> { + public float next$O(); + } + public interface x10$lang$Double extends x10.lang.Iterator<Double> { + public double next$O(); + } + public interface x10$lang$Char extends x10.lang.Iterator<Char> { + public char next$O(); + } + public interface x10$lang$Boolean extends x10.lang.Iterator<Boolean> { + public boolean next$O(); + } + public interface x10$lang$UByte extends x10.lang.Iterator<UByte> { + public byte next$O(); + } + public interface x10$lang$UShort extends x10.lang.Iterator<UShort> { + public short next$O(); + } + public interface x10$lang$UInt extends x10.lang.Iterator<UInt> { + public int next$O(); + } + public interface x10$lang$ULong extends x10.lang.Iterator<ULong> { + public long next$O(); + } +} Added: trunk/x10.runtime/src-java/x10/core/Sequence.java =================================================================== --- trunk/x10.runtime/src-java/x10/core/Sequence.java (rev 0) +++ trunk/x10.runtime/src-java/x10/core/Sequence.java 2012-09-26 15:58:05 UTC (rev 24670) @@ -0,0 +1,54 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2012. + */ + +package x10.core; + +/* + * special return type for method abstract public x10.lang.Sequence.operator()(Int):T + */ +public interface Sequence { + public interface x10$lang$Byte extends x10.lang.Sequence<Byte> { + public byte $apply$O(int i); + } + public interface x10$lang$Short extends x10.lang.Sequence<Short> { + public short $apply$O(int i); + } + public interface x10$lang$Int extends x10.lang.Sequence<Int> { + public int $apply$O(int i); + } + public interface x10$lang$Long extends x10.lang.Sequence<Long> { + public long $apply$O(int i); + } + public interface x10$lang$Float extends x10.lang.Sequence<Float> { + public float $apply$O(int i); + } + public interface x10$lang$Double extends x10.lang.Sequence<Double> { + public double $apply$O(int i); + } + public interface x10$lang$Char extends x10.lang.Sequence<Char> { + public char $apply$O(int i); + } + public interface x10$lang$Boolean extends x10.lang.Sequence<Boolean> { + public boolean $apply$O(int i); + } + public interface x10$lang$UByte extends x10.lang.Sequence<UByte> { + public byte $apply$O(int i); + } + public interface x10$lang$UShort extends x10.lang.Sequence<UShort> { + public short $apply$O(int i); + } + public interface x10$lang$UInt extends x10.lang.Sequence<UInt> { + public int $apply$O(int i); + } + public interface x10$lang$ULong extends x10.lang.Sequence<ULong> { + public long $apply$O(int i); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |