Changeset 3149

Show
Ignore:
Timestamp:
12/04/08 11:39:12 (12 months ago)
Author:
sukyoungryu
Message:

[ast refactoring] Eliminated _RewriteFieldRef.

Location:
trunk/ProjectFortress
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • trunk/ProjectFortress/astgen/Fortress.ast

    r3146 r3149  
    10201020                             */ 
    10211021                            FieldRef(Id field); 
    1022                             /** 
    1023                              * A rewritten field ref (not a getter/setter) 
    1024                              * also used to disambiguate lexical references to self/parent 
    1025                              * and within objectexprs to get access to outer scopes 
    1026                              * where the vars in the outer scopes may in turn have been 
    1027                              * API-qualified. 
    1028                              * 
    1029                              * If the reference to outer scope can be "fixed" (there is 
    1030                              * only one out scope) then it might be good to narrow this 
    1031                              * back down to an Id. 
    1032                              * 
    1033                              * Names of "field" must be unqualified. 
    1034                              */ 
    1035                             _RewriteFieldRef(Name field); 
    10361022                        /** 
    10371023                         * The rewriting to explicitly name self and parent 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/DesugaringVisitor.java

    r3147 r3149  
    425425                                                                rhs); 
    426426                    } 
    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                         } else 
    443                             return ExprFactory.makeAssignment(span, voidType, 
    444                                                               that.getLhs(), 
    445                                                               that.getAssignOp(), 
    446                                                               rhs_result); 
    447                     } 
    448427                }); 
    449428    } 
     
    540519 
    541520    @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         else 
    548             return ExprFactory.make_RewriteFieldRef(that, obj_result, 
    549                                                     field_result); 
    550     } 
    551  
    552     @Override 
    553521    public Node forObjectExpr(ObjectExpr that) { 
    554522        DesugaringVisitor newVisitor = extend(that.getDecls()); 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/Evaluator.java

    r3146 r3149  
    137137import com.sun.fortress.nodes.VoidLiteralExpr; 
    138138import com.sun.fortress.nodes.While; 
    139 import com.sun.fortress.nodes._RewriteFieldRef; 
    140139import com.sun.fortress.nodes._RewriteFnApp; 
    141140import com.sun.fortress.nodes._RewriteFnRef; 
     
    780779    @Override 
    781780    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     @Override 
    789     public FValue for_RewriteFieldRef(_RewriteFieldRef x) { 
    790781        return forFieldRefCommon(x, x.getField()); 
    791782    } 
     
    13851376            return ((FieldRef)arf).getField(); 
    13861377        } 
    1387         if (arf instanceof _RewriteFieldRef) { 
    1388             return ((_RewriteFieldRef)arf).getField(); 
    1389  
    1390         } 
    13911378        return bug("Unexpected AbstractFieldRef " + arf); 
    13921379 
     
    14151402            return juxtMemberSelection(x, fobj, fld, exprs); 
    14161403 
    1417         } else if (fcnExpr instanceof _RewriteFieldRef) { 
    1418             // In this case, open code the FieldRef evaluation 
    1419             // so that the object can be preserved. Alternate 
    1420             // strategy might be to generate a closure from 
    1421             // 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             } 
    14311404        } else if (fcnExpr instanceof _RewriteFnRef) { 
    14321405            // Only come here if there are static args -- must be generic 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/LHSEvaluator.java

    r3141 r3149  
    5555import com.sun.fortress.nodes.Type; 
    5656import com.sun.fortress.nodes.VarRef; 
    57 import com.sun.fortress.nodes._RewriteFieldRef; 
    5857import com.sun.fortress.useful.HasAt; 
    5958import com.sun.fortress.useful.NI; 
     
    106105    @Override 
    107106    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     @Override 
    115     public Voidoid for_RewriteFieldRef(_RewriteFieldRef x) { 
    116107        return forFieldRefCommon(x, x.getField()); 
    117108    } 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/LHSToLValue.java

    r3111 r3149  
    3434import com.sun.fortress.nodes.TupleExpr; 
    3535import com.sun.fortress.nodes.VarRef; 
    36 import com.sun.fortress.nodes._RewriteFieldRef; 
    3736import com.sun.fortress.interpreter.evaluator._WrappedFValue; 
    3837import com.sun.fortress.nodes_util.ExprFactory; 
     
    107106    } 
    108107 
    109  
    110     @Override 
    111     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  
    117108    public Lhs forVarRef(VarRef x) { 
    118109        return x; 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java

    r3146 r3149  
    109109import com.sun.fortress.nodes.WhereConstraint; 
    110110import com.sun.fortress.nodes.While; 
    111 import com.sun.fortress.nodes._RewriteFieldRef; 
    112111import com.sun.fortress.nodes._RewriteFnRef; 
    113112import com.sun.fortress.nodes._RewriteObjectExpr; 
     
    221220        @Override 
    222221        Expr replacement(VarRef original) { 
    223             return new _RewriteFieldRef(original.getSpan(), false, 
    224                                         // Use this constructor 
    225                                         // here because it is a 
    226                                         // 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())); 
    230229        } 
    231230 
     
    459458        } 
    460459        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)); 
    463462        } else { 
    464463            throw new Error("Confusion in member reference numbering."); 
     
    911910                Id newName = new Id(at, "$" + element_index); 
    912911                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)))); 
    914913                element_index++; 
    915914            } 
     
    16091608                                    visitedArgs)); 
    16101609            } 
    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); 
    16141613 
    16151614            return new MethodInvocation(node.getSpan(), 
    16161615                                    false, 
    16171616                                    selfDotSomething.getObj(), // this will rewrite in the future. 
    1618                                     (Id) selfDotSomething.getField(), 
     1617                                    selfDotSomething.getField(), 
    16191618                                    visitedArgs.size() == 0 ? ExprFactory.makeVoidLiteralExpr(node.getSpan()) : //TODO wrong span 
    16201619                                    visitedArgs.size() == 1 ? visitedArgs.get(0) : 
     
    16341633        // perhaps FieldRefs are too general 
    16351634        // Recursive visits here 
    1636         _RewriteFieldRef selfDotSomething = (_RewriteFieldRef) visit(first); 
     1635        FieldRef selfDotSomething = (FieldRef) visit(first); 
    16371636        //        List<MathItem> visitedArgs = visitList(exprs); 
    16381637        Node arg = visit(((ExprMI)node.getRest().get(0)).getExpr()); 
     
    16411640                                false, 
    16421641                                selfDotSomething.getObj(), // this will rewrite in the future. 
    1643                                 (Id) selfDotSomething.getField(), 
     1642                                selfDotSomething.getField(), 
    16441643                                    (Expr)arg 
    16451644                                    /* 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ErrorMsgMaker.java

    r3148 r3149  
    252252    public String forFieldRef(FieldRef node) { 
    253253        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()); 
    258254    } 
    259255 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ExprFactory.java

    r3146 r3149  
    429429    } 
    430430 
    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  
    438431    public static VarRef makeVarRef(VarRef old, int depth) { 
    439432        return new VarRef(old.getSpan(), old.isParenthesized(), old.getVarId(), 
     
    519512    } 
    520513 
    521     public static _RewriteFieldRef make_RewriteFieldRef(_RewriteFieldRef expr, 
    522                                                         Expr receiver, Name field) { 
    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); 
    525518    } 
    526519 
  • trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java

    r3147 r3149  
    16671667    } 
    16681668 
    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  
    16801669    @Override public String forFnRefOnly(FnRef that, Option<String> exprType_result, 
    16811670                                         List<String> staticArgs_result,