Changeset 3149
- Timestamp:
- 12/04/08 11:39:12 (12 months ago)
- Location:
- trunk/ProjectFortress
- Files:
-
- 9 modified
-
astgen/Fortress.ast (modified) (1 diff)
-
src/com/sun/fortress/compiler/desugarer/DesugaringVisitor.java (modified) (2 diffs)
-
src/com/sun/fortress/interpreter/evaluator/Evaluator.java (modified) (4 diffs)
-
src/com/sun/fortress/interpreter/evaluator/LHSEvaluator.java (modified) (2 diffs)
-
src/com/sun/fortress/interpreter/evaluator/LHSToLValue.java (modified) (2 diffs)
-
src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java (modified) (7 diffs)
-
src/com/sun/fortress/nodes_util/ErrorMsgMaker.java (modified) (1 diff)
-
src/com/sun/fortress/nodes_util/ExprFactory.java (modified) (2 diffs)
-
src/com/sun/fortress/tools/FortressAstToConcrete.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ProjectFortress/astgen/Fortress.ast
r3146 r3149 1020 1020 */ 1021 1021 FieldRef(Id field); 1022 /**1023 * A rewritten field ref (not a getter/setter)1024 * also used to disambiguate lexical references to self/parent1025 * and within objectexprs to get access to outer scopes1026 * where the vars in the outer scopes may in turn have been1027 * API-qualified.1028 *1029 * If the reference to outer scope can be "fixed" (there is1030 * only one out scope) then it might be good to narrow this1031 * back down to an Id.1032 *1033 * Names of "field" must be unqualified.1034 */1035 _RewriteFieldRef(Name field);1036 1022 /** 1037 1023 * The rewriting to explicitly name self and parent -
trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/DesugaringVisitor.java
r3147 r3149 425 425 rhs); 426 426 } 427 public Node for_RewriteFieldRef(_RewriteFieldRef lhs_that) {428 if ( lhs_that.getField() instanceof Id) {429 Expr obj = (Expr) lhs_that.getObj().accept(DesugaringVisitor.this);430 Expr rhs = rhs_result;431 if ( that.getAssignOp().isSome() ) {432 Expr _lhs = (Expr)lhs_that.accept(DesugaringVisitor.this);433 rhs = ExprFactory.makeOpExpr(span, lhs_that.getExprType(),434 that.getAssignOp().unwrap(),435 _lhs, rhs);436 }437 return ExprFactory.makeMethodInvocation(span,438 that.isParenthesized(),439 voidType, obj,440 (Id)lhs_that.getField(),441 rhs);442 } else443 return ExprFactory.makeAssignment(span, voidType,444 that.getLhs(),445 that.getAssignOp(),446 rhs_result);447 }448 427 }); 449 428 } … … 540 519 541 520 @Override 542 public Node for_RewriteFieldRefOnly(_RewriteFieldRef that, Option<Type> exprType_result,543 Expr obj_result, Name field_result) {544 if ( field_result instanceof Id)545 return ExprFactory.makeMethodInvocation(that, obj_result, (Id)field_result,546 ExprFactory.makeVoidLiteralExpr(that.getSpan()));547 else548 return ExprFactory.make_RewriteFieldRef(that, obj_result,549 field_result);550 }551 552 @Override553 521 public Node forObjectExpr(ObjectExpr that) { 554 522 DesugaringVisitor newVisitor = extend(that.getDecls()); -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/Evaluator.java
r3146 r3149 137 137 import com.sun.fortress.nodes.VoidLiteralExpr; 138 138 import com.sun.fortress.nodes.While; 139 import com.sun.fortress.nodes._RewriteFieldRef;140 139 import com.sun.fortress.nodes._RewriteFnApp; 141 140 import com.sun.fortress.nodes._RewriteFnRef; … … 780 779 @Override 781 780 public FValue forFieldRef(FieldRef x) { 782 return forFieldRefCommon(x, x.getField());783 }784 785 /* (non-Javadoc)786 * @see com.sun.fortress.nodes.NodeAbstractVisitor#for_RewriteFieldRef(com.sun.fortress.nodes._RewriteFieldRef)787 */788 @Override789 public FValue for_RewriteFieldRef(_RewriteFieldRef x) {790 781 return forFieldRefCommon(x, x.getField()); 791 782 } … … 1385 1376 return ((FieldRef)arf).getField(); 1386 1377 } 1387 if (arf instanceof _RewriteFieldRef) {1388 return ((_RewriteFieldRef)arf).getField();1389 1390 }1391 1378 return bug("Unexpected AbstractFieldRef " + arf); 1392 1379 … … 1415 1402 return juxtMemberSelection(x, fobj, fld, exprs); 1416 1403 1417 } else if (fcnExpr instanceof _RewriteFieldRef) {1418 // In this case, open code the FieldRef evaluation1419 // so that the object can be preserved. Alternate1420 // strategy might be to generate a closure from1421 // the field selection.1422 _RewriteFieldRef fld_sel = (_RewriteFieldRef) fcnExpr;1423 Expr obj = fld_sel.getObj();1424 Name fld = fld_sel.getField();1425 if (fld instanceof Id) {1426 FValue fobj = obj.accept(this);1427 return juxtMemberSelection(x, fobj, (Id) fld, exprs);1428 } else {1429 NI.nyi("Field selector of dotted");1430 }1431 1404 } else if (fcnExpr instanceof _RewriteFnRef) { 1432 1405 // Only come here if there are static args -- must be generic -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/LHSEvaluator.java
r3141 r3149 55 55 import com.sun.fortress.nodes.Type; 56 56 import com.sun.fortress.nodes.VarRef; 57 import com.sun.fortress.nodes._RewriteFieldRef;58 57 import com.sun.fortress.useful.HasAt; 59 58 import com.sun.fortress.useful.NI; … … 106 105 @Override 107 106 public Voidoid forFieldRef(FieldRef x) { 108 return forFieldRefCommon(x, x.getField());109 }110 111 /* (non-Javadoc)112 * @see com.sun.fortress.nodes.NodeAbstractVisitor#for_RewriteFieldRef(com.sun.fortress.nodes._RewriteFieldRef)113 */114 @Override115 public Voidoid for_RewriteFieldRef(_RewriteFieldRef x) {116 107 return forFieldRefCommon(x, x.getField()); 117 108 } -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/LHSToLValue.java
r3111 r3149 34 34 import com.sun.fortress.nodes.TupleExpr; 35 35 import com.sun.fortress.nodes.VarRef; 36 import com.sun.fortress.nodes._RewriteFieldRef;37 36 import com.sun.fortress.interpreter.evaluator._WrappedFValue; 38 37 import com.sun.fortress.nodes_util.ExprFactory; … … 107 106 } 108 107 109 110 @Override111 public Lhs for_RewriteFieldRef(_RewriteFieldRef x) {112 Expr from = wrapEval(x.getObj(), "Non-object in field selection");113 // TODO need to generalize to dotted names.114 return new _RewriteFieldRef(x.getSpan(), false, from, x.getField());115 }116 117 108 public Lhs forVarRef(VarRef x) { 118 109 return x; -
trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java
r3146 r3149 109 109 import com.sun.fortress.nodes.WhereConstraint; 110 110 import com.sun.fortress.nodes.While; 111 import com.sun.fortress.nodes._RewriteFieldRef;112 111 import com.sun.fortress.nodes._RewriteFnRef; 113 112 import com.sun.fortress.nodes._RewriteObjectExpr; … … 221 220 @Override 222 221 Expr replacement(VarRef original) { 223 return new _RewriteFieldRef(original.getSpan(), false,224 // Use this constructor225 // here because it is a226 // rewrite.227 dottedReference(original.getSpan(),228 objectNestingDepth - objectNestedness),229 filterQID(original.getVarId()));222 return new FieldRef(original.getSpan(), false, 223 // Use this constructor 224 // here because it is a 225 // rewrite. 226 dottedReference(original.getSpan(), 227 objectNestingDepth - objectNestedness), 228 filterQID(original.getVarId())); 230 229 } 231 230 … … 459 458 } 460 459 if (i > 0) { 461 return new _RewriteFieldRef(s, false, dottedReference(s, i - 1),462 new Id(s,WellKnownNames.secretParentName));460 return new FieldRef(s, false, dottedReference(s, i - 1), 461 new Id(s,WellKnownNames.secretParentName)); 463 462 } else { 464 463 throw new Error("Confusion in member reference numbering."); … … 911 910 Id newName = new Id(at, "$" + element_index); 912 911 newdecls.add(new VarDecl(at, Useful.list(lv), 913 Option.<Expr>some(new _RewriteFieldRef(at, false, init, newName))));912 Option.<Expr>some(new FieldRef(at, false, init, newName)))); 914 913 element_index++; 915 914 } … … 1609 1608 visitedArgs)); 1610 1609 } 1611 } else if (expr instanceof _RewriteFieldRef) {1612 1613 _RewriteFieldRef selfDotSomething = (_RewriteFieldRef) visit(first);1610 } else if (expr instanceof FieldRef) { 1611 1612 FieldRef selfDotSomething = (FieldRef) visit(first); 1614 1613 1615 1614 return new MethodInvocation(node.getSpan(), 1616 1615 false, 1617 1616 selfDotSomething.getObj(), // this will rewrite in the future. 1618 (Id)selfDotSomething.getField(),1617 selfDotSomething.getField(), 1619 1618 visitedArgs.size() == 0 ? ExprFactory.makeVoidLiteralExpr(node.getSpan()) : //TODO wrong span 1620 1619 visitedArgs.size() == 1 ? visitedArgs.get(0) : … … 1634 1633 // perhaps FieldRefs are too general 1635 1634 // Recursive visits here 1636 _RewriteFieldRef selfDotSomething = (_RewriteFieldRef) visit(first);1635 FieldRef selfDotSomething = (FieldRef) visit(first); 1637 1636 // List<MathItem> visitedArgs = visitList(exprs); 1638 1637 Node arg = visit(((ExprMI)node.getRest().get(0)).getExpr()); … … 1641 1640 false, 1642 1641 selfDotSomething.getObj(), // this will rewrite in the future. 1643 (Id)selfDotSomething.getField(),1642 selfDotSomething.getField(), 1644 1643 (Expr)arg 1645 1644 /* -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ErrorMsgMaker.java
r3148 r3149 252 252 public String forFieldRef(FieldRef node) { 253 253 return node.getObj().accept(this) + "." + forId(node.getField()); 254 }255 256 public String for_RewriteFieldRef(FieldRef node) {257 return node.getObj().accept(this) + "." + forName(node.getField());258 254 } 259 255 -
trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ExprFactory.java
r3146 r3149 429 429 } 430 430 431 public static MethodInvocation makeMethodInvocation(_RewriteFieldRef that,432 Expr obj, Id field,433 Expr expr) {434 return new MethodInvocation(that.getSpan(), that.isParenthesized(), obj,435 field, expr);436 }437 438 431 public static VarRef makeVarRef(VarRef old, int depth) { 439 432 return new VarRef(old.getSpan(), old.isParenthesized(), old.getVarId(), … … 519 512 } 520 513 521 public static _RewriteFieldRef make_RewriteFieldRef(_RewriteFieldRef expr,522 Expr receiver, Namefield) {523 return new _RewriteFieldRef(expr.getSpan(), expr.isParenthesized(),524 expr.getExprType(), receiver, field);514 public static FieldRef make_RewriteFieldRef(FieldRef expr, 515 Expr receiver, Id field) { 516 return new FieldRef(expr.getSpan(), expr.isParenthesized(), 517 expr.getExprType(), receiver, field); 525 518 } 526 519 -
trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java
r3147 r3149 1667 1667 } 1668 1668 1669 @Override public String for_RewriteFieldRefOnly(_RewriteFieldRef that, Option<String> exprType_result,1670 String obj_result,1671 String field_result) {1672 StringBuilder s = new StringBuilder();1673 1674 s.append( obj_result ).append( "." ).append( field_result ) ;1675 1676 return handleParen( s.toString(),1677 that.isParenthesized() );1678 }1679 1680 1669 @Override public String forFnRefOnly(FnRef that, Option<String> exprType_result, 1681 1670 List<String> staticArgs_result,

