Changeset 3133
- Timestamp:
- 12/02/08 10:01:41 (12 months ago)
- Location:
- trunk
- Files:
-
- 17 modified
-
Library/FortressSyntax.fsi (modified) (1 diff)
-
ProjectFortress/astgen/Fortress.ast (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/compiler/Types.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeAnalyzer.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeAnalyzerUtil.java (modified) (1 diff)
-
ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java (modified) (1 diff)
-
ProjectFortress/src/com/sun/fortress/interpreter/evaluator/EvalType.java (modified) (3 diffs)
-
ProjectFortress/src/com/sun/fortress/interpreter/evaluator/MakeInferenceSpecific.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/interpreter/evaluator/ScoutVisitor.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/interpreter/evaluator/types/FType.java (modified) (3 diffs)
-
ProjectFortress/src/com/sun/fortress/interpreter/evaluator/types/FTypeTuple.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/nodes_util/ErrorMsgMaker.java (modified) (1 diff)
-
ProjectFortress/src/com/sun/fortress/nodes_util/NodeComparator.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/nodes_util/NodeFactory.java (modified) (2 diffs)
-
ProjectFortress/src/com/sun/fortress/nodes_util/NodeUtil.java (modified) (1 diff)
-
ProjectFortress/src/com/sun/fortress/parser/Type.rats (modified) (1 diff)
-
ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Library/FortressSyntax.fsi
r3096 r3133 126 126 RightEncloser : Op 127 127 ExponentOp : Op 128 EncloserPair : Enclosing128 EncloserPair : Op 129 129 Op : Op 130 130 CompoundOp : Op -
trunk/ProjectFortress/astgen/Fortress.ast
r3132 r3133 1342 1342 * e.g.) (String, ZZ32, String..., foo=ZZ32) 1343 1343 * 1344 * If this tuple type does not have any elements, 1345 * it is a void type. 1346 * void type 1347 * NonArrowType ::= () 1348 * e.g.) () 1349 * 1344 1350 * <varargs> 1345 1351 * It has a varargs parameter if the varargs field is set. … … 1348 1354 Option<Type> varargs = Option.<Type>none(), 1349 1355 List<KeywordType> keywords = Collections.<KeywordType>emptyList()); 1350 /**1351 * void type1352 * NonArrowType ::= ()1353 * e.g.) ()1354 */1355 VoidType();1356 1356 /** 1357 1357 * arrow type -
trunk/ProjectFortress/src/com/sun/fortress/compiler/Types.java
r3132 r3133 60 60 public static final Type BOTTOM_DOMAIN = BOTTOM; 61 61 62 public static final VoidType VOID = newVoidType(span);62 public static final TupleType VOID = NodeFactory.makeVoidType(span); 63 63 public static final TraitType FLOAT_LITERAL = makeTraitType(fortressBuiltin, "FloatLiteral"); 64 64 public static final TraitType INT_LITERAL = makeTraitType(fortressBuiltin, "IntLiteral"); … … 298 298 public static Type makeDomain(Type argsType, final List<KeywordType> keywords) { 299 299 return argsType.accept(new NodeAbstractVisitor<Type>() { 300 @Override public Type forVoidType(VoidType t) {301 if ( keywords.isEmpty() )302 return t;303 else304 return new TupleType(NodeFactory.makeSpan("Types_bogus_span_for_empty_list", keywords),305 Collections.<Type>emptyList(), keywords);306 }307 300 @Override public Type forTupleType(TupleType t) { 308 301 if ( t.getVarargs().isNone() ) -
trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeAnalyzer.java
r3123 r3133 477 477 @Override public ConstraintFormula forTraitType(TraitType s) { 478 478 return traitSubVararg(s, t, h); 479 }480 @Override public ConstraintFormula forVoidType(VoidType s) {481 return voidSubVararg(s, t, h);482 479 } 483 480 @Override public ConstraintFormula forTupleType(TupleType s) { … … 669 666 } 670 667 671 private ConstraintFormula voidSubVararg(VoidType s, TupleType t, SubtypeHistory h) {672 return sub(s, varargDisjunct(t, 0), h);673 }674 675 668 private ConstraintFormula traitSubVararg(TraitType s, TupleType t, SubtypeHistory h) { 676 669 return sub(s, varargDisjunct(t, 1), h); -
trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeAnalyzerUtil.java
r3123 r3133 194 194 return false; 195 195 } 196 @Override public Boolean forVoidType(VoidType t) { return false; }197 196 @Override public Boolean for_InferenceVarType(_InferenceVarType t) { return false; } 198 197 @Override public Boolean forBoundType(BoundType t) { -
trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java
r3132 r3133 231 231 if( arg_type instanceof TupleType ) 232 232 arg_size = ((TupleType)arg_type).getElements().size(); 233 else if( arg_type instanceof VoidType )234 arg_size = 0;235 233 else 236 234 arg_size = 1; -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/EvalType.java
r3123 r3133 127 127 128 128 public List<FType> getFTypeListFromList(List<? extends Type> l) { 129 if (l == null || l.size() == 1 && (l.get(0) instanceof VoidType)) { 129 if (l == null || 130 l.size() == 1 && NodeUtil.isVoidType(l.get(0))) { 130 131 // Flatten out voids. 131 132 // Should this be mutable? … … 327 328 } 328 329 329 public FType forVoidType(VoidType v) { return FTypeVoid.ONLY; }330 331 330 /* (non-Javadoc) 332 331 * @see com.sun.fortress.interpreter.nodes.NodeVisitor#forIntArg(com.sun.fortress.interpreter.nodes.IntArg) … … 412 411 @Override 413 412 public FType forTupleType(TupleType tt) { 414 if ( tt.getVarargs().isNone() ) { 413 if ( NodeUtil.isVoidType(tt) ) 414 return FTypeVoid.ONLY; 415 else if ( tt.getVarargs().isNone() ) { 415 416 List<FType> elts = getFTypeListFromList(tt.getElements()); 416 417 return FTypeTuple.make(elts); -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/MakeInferenceSpecific.java
r3123 r3133 32 32 import com.sun.fortress.nodes.TraitType; 33 33 import com.sun.fortress.nodes.TupleType; 34 import com.sun.fortress.nodes.VoidType;35 34 import com.sun.fortress.nodes_util.NodeUtil; 36 35 import com.sun.fortress.compiler.Types; … … 147 146 } 148 147 } 149 150 /* (non-Javadoc)151 * @see com.sun.fortress.nodes.NodeAbstractVisitor_void#forVoidType(com.sun.fortress.nodes.VoidType)152 */153 @Override154 public void forVoidType(VoidType that) {155 // do nothing156 }157 158 159 160 148 } -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/ScoutVisitor.java
r3109 r3133 37 37 import com.sun.fortress.nodes.TupleType; 38 38 import com.sun.fortress.nodes.Type; 39 import com.sun.fortress.nodes.VoidType;40 39 import com.sun.fortress.nodes.WhereExtends; 41 40 … … 168 167 169 168 /* (non-Javadoc) 170 * @see com.sun.fortress.nodes.NodeAbstractVisitor_void#forVoidType(com.sun.fortress.nodes.VoidType)171 */172 @Override173 public void forVoidType(VoidType that) {174 // TODO Auto-generated method stub175 super.forVoidType(that);176 }177 178 /* (non-Javadoc)179 169 * @see com.sun.fortress.nodes.NodeAbstractVisitor_void#forWhereExtends(com.sun.fortress.nodes.WhereExtends) 180 170 */ -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/types/FType.java
r3060 r3133 38 38 import com.sun.fortress.nodes.AnyType; 39 39 import com.sun.fortress.nodes.StaticArg; 40 import com.sun.fortress.nodes.TupleType; 40 41 import com.sun.fortress.nodes.Type; 41 42 import com.sun.fortress.nodes.VarType; 42 import com.sun.fortress.nodes.VoidType;43 43 import com.sun.fortress.nodes_util.NodeUtil; 44 44 import com.sun.fortress.useful.BASet; … … 491 491 if (! (val instanceof VarType)) { 492 492 if (DUMP_UNIFY) System.out.print("builtin "); 493 if (val instanceof VoidType) { 493 if (val instanceof TupleType && 494 NodeUtil.isVoidType((TupleType)val)) { 494 495 other = FTypeVoid.ONLY; 495 496 } … … 500 501 VarType vtval = (VarType)val; 501 502 other = env.getTypeNull(vtval); 502 503 503 504 504 505 if (DUMP_UNIFY && other==null) System.out.print("undef second "); 505 506 } -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/types/FTypeTuple.java
r3109 r3133 34 34 import com.sun.fortress.nodes.TupleType; 35 35 import com.sun.fortress.nodes.Type; 36 import com.sun.fortress.nodes .VoidType;36 import com.sun.fortress.nodes_util.NodeUtil; 37 37 import com.sun.fortress.useful.BoundingMap; 38 38 import com.sun.fortress.useful.Factory1; … … 376 376 List<Type> elements; 377 377 Option<Type> vargs; 378 if (val instanceof VoidType) { 379 elements = Collections.emptyList(); 380 vargs = Option.none(); 381 } 382 else if (val instanceof TupleType) { 378 if (val instanceof TupleType) { 383 379 TupleType _val = (TupleType) val; 384 if ( _val.getVarargs().isNone() ) { 380 if ( NodeUtil.isVoidType(_val) ) { 381 elements = Collections.emptyList(); 382 vargs = Option.none(); 383 } else if ( _val.getVarargs().isNone() ) { 385 384 elements = _val.getElements(); 386 385 vargs = Option.none(); -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ErrorMsgMaker.java
r3132 r3133 115 115 116 116 public String forVoidLiteralExpr(VoidLiteralExpr e) { 117 return "()";118 }119 120 public String forVoidType(VoidType t) {121 117 return "()"; 122 118 } -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeComparator.java
r3132 r3133 412 412 if (left instanceof ArrowType) { 413 413 return compare((ArrowType) left, (ArrowType) right); 414 } else if (left instanceof VoidType) {415 return 0;416 414 } else if (left instanceof TupleType) { 417 return compare((TupleType) left, (TupleType) right); 415 if ( NodeUtil.isVoidType((TupleType)left) ) 416 return 0; 417 else return compare((TupleType) left, (TupleType) right); 418 418 } else if (left instanceof TaggedDimType) { 419 419 return compare((TaggedDimType) left, (TaggedDimType) right); … … 437 437 right.getClass() + ") is not implemented!"); 438 438 } 439 440 static int subtypeCompareTo(VoidType left, VoidType right) {441 // All voids are equal442 return 0;443 }444 439 } -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeFactory.java
r3132 r3133 1056 1056 } 1057 1057 1058 public static VoidType makeVoidType(Span span) { 1059 return new VoidType(span, false); 1058 public static TupleType makeVoidType(Span span) { 1059 return new TupleType(span, false, Collections.<Type>emptyList(), 1060 Option.<Type>none(), 1061 Collections.<KeywordType>emptyList()); 1060 1062 } 1061 1063 … … 1265 1267 public Type forTupleType(TupleType t) { 1266 1268 return new TupleType(t.getSpan(), true, t.getElements(), 1267 t.getVarargs()); 1268 } 1269 public Type forVoidType(VoidType t) { 1270 return new VoidType(t.getSpan(), true); 1269 t.getVarargs(), t.getKeywords()); 1271 1270 } 1272 1271 public Type forTaggedDimType(TaggedDimType t) { -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeUtil.java
r3132 r3133 166 166 else if (def instanceof FnExpr) { return Option.some(((FnExpr)def).getBody()); } 167 167 else { return Option.none(); } 168 } 169 170 public static boolean isVoidType(Type t) { 171 if ( t instanceof TupleType ) { 172 TupleType _t = (TupleType)t; 173 return ( _t.getElements().isEmpty() && 174 _t.getVarargs().isNone() && 175 _t.getKeywords().isEmpty() ); 176 } else 177 return false; 168 178 } 169 179 -
trunk/ProjectFortress/src/com/sun/fortress/parser/Type.rats
r3123 r3133 216 216 private Type VoidType = 217 217 openparen w closeparen 218 { yyValue = newVoidType(createSpan(yyStart,yyCount)); };218 { yyValue = NodeFactory.makeVoidType(createSpan(yyStart,yyCount)); }; 219 219 220 220 /* TypeTail ::= -
trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java
r3132 r3133 2175 2175 } 2176 2176 2177 @Override public String forVoidTypeOnly(VoidType that) {2178 return "()";2179 }2180 2181 2177 @Override public String forArrowTypeOnly(ArrowType that, 2182 2178 String domain_result,

