Changeset 3187

Show
Ignore:
Timestamp:
12/10/08 13:18:29 (12 months ago)
Author:
sukyoungryu
Message:

[ast refactoring] Removed optional fields of _RewriteFnRef, CoercionInvocation?, MethodInvocation?, ArrayElement?, and ArrayElements?.

Location:
trunk/ProjectFortress
Files:
9 modified

Legend:

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

    r3186 r3187  
    874874                         * list from a FnRef into something else. 
    875875                         */ 
    876                         _RewriteFnRef(Expr fnExpr, 
    877                                       List<StaticArg> staticArgs 
    878                                           = Collections.<StaticArg>emptyList()); 
     876                        _RewriteFnRef(Expr fnExpr, List<StaticArg> staticArgs); 
    879877                        /** 
    880878                         * Temporarily, until closure conversion is always on-line, 
     
    963961                         */ 
    964962                        CoercionInvocation(BaseType toType, 
    965                                            List<StaticArg> staticArgs 
    966                                                = Collections.<StaticArg>emptyList(), 
    967                                            Expr arg); 
     963                                           List<StaticArg> staticArgs, Expr arg); 
    968964                        /** 
    969965                         * a method invocation 
     
    975971                         */ 
    976972                        MethodInvocation(Expr obj, Id method, 
    977                                          List<StaticArg> staticArgs 
    978                                              = Collections.<StaticArg>emptyList(), 
    979                                          Expr arg); 
     973                                         List<StaticArg> staticArgs, Expr arg); 
    980974                        /** 
    981975                         * primary expression without any dots 
     
    995989                         * e.g.) [1 2 3; 4 5 6; 7 8 9] 
    996990                         */ 
    997                         abstract ArrayExpr(List<StaticArg> staticArgs 
    998                                                = Collections.<StaticArg>emptyList()); 
     991                        abstract ArrayExpr(List<StaticArg> staticArgs); 
    999992                            /** 
    1000993                             * array with a single element 
     
    1006999                             * e.g.) [3 4 5; 6 7 8] 
    10071000                             */ 
    1008                             ArrayElements(int dimension, 
    1009                                           List<ArrayExpr> elements, 
    1010                                           boolean outermost = false); 
     1001                            ArrayElements(int dimension, List<ArrayExpr> elements, 
     1002                                          boolean outermost); 
    10111003            /** 
    10121004             * type 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/DottedMethodRewriteVisitor.java

    r3182 r3187  
    8282           if ( ! (name instanceof Id) ) 
    8383               bug(name, "The name field of FnRef should be Id."); 
    84            MethodInvocation mi = new MethodInvocation( fnRef.getSpan(), 
    85                                                        fnRef.isParenthesized(), fnRef.getExprType(), receiver, 
    86                                                        (Id)name, fnRef.getStaticArgs(), arg ); 
     84           MethodInvocation mi = ExprFactory.makeMethodInvocation( fnRef.getSpan(), 
     85                                                                   fnRef.isParenthesized(), 
     86                                                                   fnRef.getExprType(), 
     87                                                                   receiver, (Id)name, 
     88                                                                   fnRef.getStaticArgs(), 
     89                                                                   arg ); 
    8790           return mi; 
    8891        } 
     
    105108            bug(name, "The name field of FnRef should be Id."); 
    106109 
    107         mi = new MethodInvocation( fnRef.getSpan(), 
    108                                    fnRef.isParenthesized(), fnRef.getExprType(), receiver, 
    109                                    (Id)name, fnRef.getStaticArgs(), argExpr ); 
     110        mi = ExprFactory.makeMethodInvocation( fnRef.getSpan(), 
     111                                               fnRef.isParenthesized(), 
     112                                               fnRef.getExprType(), 
     113                                               receiver, (Id)name, 
     114                                               fnRef.getStaticArgs(), 
     115                                               argExpr ); 
    110116 
    111117        return mi; 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java

    r3184 r3187  
    10661066                        IntArg size = NodeFactory.makeIntArgVal(""+1); 
    10671067                        Type t=Types.makeArrayKType(1, Useful.list(elem, lower, size)); 
    1068                         Node new_node=new ArrayElement(that.getSpan(), that.isParenthesized(), Option.some(t), (List<StaticArg>) TypeCheckerResult.astFromResults(staticArgs_result), (Expr) element_result.ast()); 
     1068                        Node new_node=ExprFactory.makeArrayElement(that.getSpan(), that.isParenthesized(), 
     1069                                                                   Option.some(t), 
     1070                                                                   (List<StaticArg>) TypeCheckerResult.astFromResults(staticArgs_result), 
     1071                                                                   (Expr) element_result.ast()); 
    10691072                        return TypeCheckerResult.compose(new_node,t,this.subtypeChecker, element_result); 
    10701073                } 
     
    10761079                                                element_result.type().unwrap()+" must be a subtype of "+((TypeArg)that.getStaticArgs().get(0)).getTypeArg()); 
    10771080                                Type t=Types.makeArrayKType(1, that.getStaticArgs()); 
    1078                                 Node new_node=new ArrayElement(that.getSpan(), that.isParenthesized(), Option.some(t), (List<StaticArg>) TypeCheckerResult.astFromResults(staticArgs_result), (Expr) element_result.ast()); 
     1081                                Node new_node=ExprFactory.makeArrayElement(that.getSpan(), that.isParenthesized(), 
     1082                                                                           Option.some(t), 
     1083                                                                           (List<StaticArg>) TypeCheckerResult.astFromResults(staticArgs_result), 
     1084                                                                           (Expr) element_result.ast()); 
    10791085                                return TypeCheckerResult.compose(new_node,t,this.subtypeChecker, element_result, res, 
    10801086                                                TypeCheckerResult.compose(new_node,this.subtypeChecker,staticArgs_result), 
     
    12421248                        } 
    12431249                }; 
    1244                 ArrayElements new_node=new ArrayElements(that.getSpan(), that.isParenthesized(), Option.some(return_type) , that.getStaticArgs(), 
    1245                                 that.getDimension(), Useful.list(IterUtil.map(subarrays, get_expr)), that.isOutermost()); 
     1250                ArrayElements new_node=ExprFactory.makeArrayElements(that.getSpan(), 
     1251                                                                     that.isParenthesized(), 
     1252                                                                     Option.some(return_type) , 
     1253                                                                     that.getStaticArgs(), 
     1254                                                                     that.getDimension(), 
     1255                                                                     Useful.list(IterUtil.map(subarrays, get_expr)), 
     1256                                                                     that.isOutermost()); 
    12461257 
    12471258                all_results.add(new TypeCheckerResult(new_node, accumulated_constraints)); 
     
    33433354                        Type range = subtypeChecker.meet(ranges); 
    33443355                        range = subtypeChecker.normalize(range); 
    3345                         MethodInvocation new_node = new MethodInvocation(that.getSpan(), 
    3346                                         that.isParenthesized(), 
    3347                                         Option.<Type>some(range), 
    3348                                         (Expr)obj_result.ast(), 
    3349                                         that.getMethod(), 
     3356                        MethodInvocation new_node = ExprFactory.makeMethodInvocation(that.getSpan(), 
     3357                                                                                     that.isParenthesized(), 
     3358                                                                                     Option.<Type>some(range), 
     3359                                                                                     (Expr)obj_result.ast(), 
     3360                                                                                     that.getMethod(), 
    33503361                                        (List<StaticArg>)TypeCheckerResult.astFromResults(staticArgs_result), 
    33513362                                        (Expr)arg_result.ast()); 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java

    r3185 r3187  
    11161116                Environment.TOP_LEVEL))); 
    11171117 
    1118         _RewriteFnRef fn = new _RewriteFnRef(s.getSpan(), in_fn, args); 
     1118        _RewriteFnRef fn = new _RewriteFnRef(s.getSpan(), false, Option.<Type>none(), 
     1119                                             in_fn, args); 
    11191120 
    11201121        List<Param> params = Collections.emptyList(); 
     
    15991600            VarRef vre = (VarRef) expr; 
    16001601            if (vre.getLexicalDepth() == -1) { 
    1601                 return new MethodInvocation(node.getSpan(), 
    1602                         false, 
     1602                return ExprFactory.makeMethodInvocation(node.getSpan(), 
     1603                        false, node.getExprType(), 
    16031604                        ExprFactory.makeVarRef(node.getSpan(), WellKnownNames.secretSelfName), // this will rewrite in the future. 
    16041605                        (Id) vre.getVarId(), 
     
    16121613            FieldRef selfDotSomething = (FieldRef) visit(first); 
    16131614 
    1614             return new MethodInvocation(node.getSpan(), 
    1615                                     false, 
     1615            return ExprFactory.makeMethodInvocation(node.getSpan(), 
     1616                                    false, node.getExprType(), 
    16161617                                    selfDotSomething.getObj(), // this will rewrite in the future. 
    16171618                                    selfDotSomething.getField(), 
     
    16371638        Node arg = visit(((ExprMI)node.getRest().get(0)).getExpr()); 
    16381639 
    1639         return new MethodInvocation(node.getSpan(), 
    1640                                 false, 
     1640        return ExprFactory.makeMethodInvocation(node.getSpan(), 
     1641                                false, node.getExprType(), 
    16411642                                selfDotSomething.getObj(), // this will rewrite in the future. 
    16421643                                selfDotSomething.getField(), 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/RewriteInPresenceOfTypeInfoVisitor.java

    r3156 r3187  
    5454        if (sargs.size() > 0) 
    5555            return (new _RewriteFnRef(fr.getSpan(), 
    56                 fr.isParenthesized(), 
     56                                      fr.isParenthesized(), 
     57                                      fr.getExprType(), 
    5758                                      new VarRef(id.getSpan(), 
    5859                                                 id, 
    5960                                                 Collections.<StaticArg>emptyList()), 
    60                 sargs)).accept(this); 
     61                                      sargs)).accept(this); 
    6162 
    6263        else { 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ExprFactory.java

    r3186 r3187  
    3838 
    3939public class ExprFactory { 
     40 
     41    public static ArrayElement makeArrayElement(Expr elem) { 
     42        return makeArrayElement(elem.getSpan(), false, Option.<Type>none(), 
     43                                Collections.<StaticArg>emptyList(), elem); 
     44    } 
     45 
     46    public static ArrayElement makeArrayElement(Span span, boolean parenthesized, 
     47                                                Option<Type> ty, 
     48                                                List<StaticArg> staticArgs, 
     49                                                Expr elem) { 
     50        return new ArrayElement(span, parenthesized, ty, staticArgs, elem); 
     51    } 
     52 
     53    public static ArrayElements makeArrayElements(Span span, int dim, 
     54                                                  List<ArrayExpr> elems) { 
     55        return makeArrayElements(span, false, Option.<Type>none(), 
     56                                 Collections.<StaticArg>emptyList(), dim, elems, 
     57                                 false); 
     58    } 
     59 
     60    public static ArrayElements makeArrayElements(ArrayElements a, 
     61                                                  boolean outermost) { 
     62        return makeArrayElements(a.getSpan(), a.isParenthesized(), a.getExprType(), 
     63                                 a.getStaticArgs(), a.getDimension(), 
     64                                 a.getElements(), outermost); 
     65    } 
     66 
     67    public static ArrayElements makeArrayElements(ArrayElements a, 
     68                                                  List<StaticArg> staticArgs, 
     69                                                  boolean outermost) { 
     70        return makeArrayElements(a.getSpan(), a.isParenthesized(), a.getExprType(), 
     71                                 staticArgs, a.getDimension(), a.getElements(), 
     72                                 outermost); 
     73    } 
     74 
     75    public static ArrayElements makeArrayElements(Span span, boolean parenthesized, 
     76                                                  Option<Type> ty, 
     77                                                  List<StaticArg> staticArgs, 
     78                                                  int dim, 
     79                                                  List<ArrayExpr> elems, 
     80                                                  boolean outermost) { 
     81        return new ArrayElements(span, parenthesized, ty, staticArgs, dim, elems, 
     82                                 outermost); 
     83    } 
     84 
     85    public static MethodInvocation makeMethodInvocation(FieldRef that, Expr obj, 
     86                                                        Id field, Expr expr) { 
     87        return makeMethodInvocation(that.getSpan(), that.isParenthesized(), 
     88                                    that.getExprType(), obj, field, expr); 
     89    } 
     90 
     91    public static MethodInvocation makeMethodInvocation(Span span, 
     92                                                        Expr receiver, 
     93                                                        Id method, 
     94                                                        Expr arg) { 
     95        return makeMethodInvocation(span, false, Option.<Type>none(), 
     96                                    receiver, method, arg); 
     97    } 
     98    public static MethodInvocation makeMethodInvocation(Span span, 
     99                                                        Expr receiver, 
     100                                                        Id method, 
     101                                                        List<StaticArg> staticArgs, 
     102                                                        Expr arg) { 
     103        return makeMethodInvocation(span, false, Option.<Type>none(), 
     104                                    receiver, method, staticArgs, arg); 
     105    } 
     106 
     107    public static MethodInvocation makeMethodInvocation(Span span, 
     108                                                        boolean isParenthesized, 
     109                                                        Option<Type> type, 
     110                                                        Expr obj, Id field, 
     111                                                        Expr expr) { 
     112        return makeMethodInvocation(span, isParenthesized, type, obj, field, 
     113                                    Collections.<StaticArg>emptyList(), expr); 
     114    } 
     115 
     116    public static MethodInvocation makeMethodInvocation(Span span, 
     117                                                        boolean isParenthesized, 
     118                                                        Option<Type> type, 
     119                                                        Expr obj, Id field, 
     120                                                        List<StaticArg> staticArgs, 
     121                                                        Expr expr) { 
     122        return new MethodInvocation(span, isParenthesized, type, obj, field, 
     123                                    staticArgs, expr); 
     124    } 
    40125 
    41126    public static CharLiteralExpr makeCharLiteralExpr(Span span, String s) { 
     
    466551    } 
    467552 
    468     public static MethodInvocation makeMethodInvocation(Span span, 
    469                                                         boolean isParenthesized, 
    470                                                         Option<Type> type, 
    471                                                         Expr obj, 
    472                                                         Id field, Expr expr) { 
    473         return new MethodInvocation(span, isParenthesized, type, obj, 
    474                                     field, expr); 
    475     } 
    476  
    477     public static MethodInvocation makeMethodInvocation(FieldRef that, Expr obj, 
    478                                                         Id field, Expr expr) { 
    479         return new MethodInvocation(that.getSpan(), that.isParenthesized(), obj, 
    480                                     field, expr); 
    481     } 
    482  
    483553    public static VarRef makeVarRef(VarRef old, int depth) { 
    484554        return new VarRef(old.getSpan(), old.isParenthesized(), old.getVarId(), 
     
    868938                                                           that.getArgs()); 
    869939                } 
    870                 public Expr forArrayElement(ArrayElement e) { 
    871             return new ArrayElement(e.getSpan(), true, e.getElement()); 
     940        public Expr forArrayElement(ArrayElement e) { 
     941            return makeArrayElement(e.getSpan(), true, e.getExprType(), 
     942                                    e.getStaticArgs(), e.getElement()); 
    872943        } 
    873944        public Expr forArrayElements(ArrayElements e) { 
    874             return new ArrayElements(e.getSpan(), true, e.getDimension(), 
    875                     e.getElements()); 
     945            return makeArrayElements(e.getSpan(), true, e.getExprType(), 
     946                                     e.getStaticArgs(), e.getDimension(), 
     947                                     e.getElements(), e.isOutermost()); 
    876948        } 
    877949        public Expr forFloatLiteralExpr(FloatLiteralExpr e) { 
     
    910982        } 
    911983        public Expr forMethodInvocation(MethodInvocation e) { 
    912             return new MethodInvocation(e.getSpan(), true, e.getObj(), 
    913                     e.getMethod(), e.getStaticArgs(), 
    914                     e.getArg()); 
     984            return makeMethodInvocation(e.getSpan(), true, e.getExprType(), 
     985                                        e.getObj(), e.getMethod(), 
     986                                        e.getStaticArgs(), e.getArg()); 
    915987        } 
    916988        public Expr forJuxt(Juxt e) { 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/Expression.rats

    r3182 r3187  
    341341       Expr receiver = ExprFactory.makeReceiver(IterUtil.skipLast(a1)); 
    342342       Span span = FortressUtil.spanTwo(receiver,a3); 
    343        Expr e1 = new MethodInvocation(span, receiver, last, a2, a3); 
     343       Expr e1 = ExprFactory.makeMethodInvocation(span, receiver, last, a2, a3); 
    344344       Expr e2 = (Expr)apply(a4s, e1); 
    345345       yyValue = (Expr)apply(a5s, e2); 
     
    360360       Expr receiver = ExprFactory.makeReceiver(IterUtil.skipLast(a1)); 
    361361       Span span = FortressUtil.spanTwo(receiver,a2); 
    362        Expr e1 = new MethodInvocation(span, receiver, last, a2); 
     362       Expr e1 = ExprFactory.makeMethodInvocation(span, receiver, last, a2); 
    363363       Expr e2 = (Expr)apply(a3s, e1); 
    364364       yyValue = (Expr)apply(a4s, e2); 
     
    536536               if (a2 == null) sargs = Collections.<StaticArg>emptyList(); 
    537537               else            sargs = a2; 
    538                Expr mtdInv = new MethodInvocation(FortressUtil.spanTwo(base, a3), 
    539                                                   false, base, a1, sargs, a3); 
     538               Expr mtdInv = ExprFactory.makeMethodInvocation(FortressUtil.spanTwo(base, a3), 
     539                                                              base, a1, sargs, a3); 
    540540               return (Expr)apply(a4s, mtdInv); 
    541541           }}; 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/Literal.rats

    r3032 r3187  
    5555     { if (a2s == null || a2s.isEmpty()) { 
    5656             List<ArrayExpr> list = new ArrayList<ArrayExpr>(); 
    57              list.add(new ArrayElement(a1.getSpan(), false, a1)); 
    58              yyValue = new ArrayElements(a1.getSpan(), false, 1, list); 
     57             list.add(ExprFactory.makeArrayElement(a1)); 
     58             yyValue = ExprFactory.makeArrayElements(a1.getSpan(), 1, list); 
    5959         } else 
    6060           yyValue = FortressUtil.multiDimCons(a1, a2s.list()); 
  • trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java

    r3186 r3187  
    627627//                      (multi_dim_cons expr dim first :: rest)) 
    628628    private static ArrayExpr multiDimElement(Expr expr) { 
    629         return new ArrayElement(expr.getSpan(), false, expr); 
     629        return ExprFactory.makeArrayElement(expr); 
    630630    } 
    631631    private static ArrayElements addOneMultiDim(ArrayExpr multi, int dim, 
     
    637637            elems.add(multi); 
    638638            elems.add(elem); 
    639             return new ArrayElements(span, false, dim, elems); 
     639            return ExprFactory.makeArrayElements(span, dim, elems); 
    640640        } else if (multi instanceof ArrayElements) { 
    641641            ArrayElements m = (ArrayElements)multi; 
     
    644644            if (dim == _dim) { 
    645645                elements.add(elem); 
    646                 return new ArrayElements(span, false, dim, elements); 
     646                return ExprFactory.makeArrayElements(span, dim, elements); 
    647647            } else if (dim > _dim) { 
    648648                List<ArrayExpr> elems = new ArrayList<ArrayExpr>(); 
    649649                elems.add(multi); 
    650650                elems.add(elem); 
    651                 return new ArrayElements(span, false, dim, elems); 
     651                return ExprFactory.makeArrayElements(span, dim, elems); 
    652652            } else if (elements.size() == 0) { 
    653653                return syntaxError(multi.getSpan(), 
     
    657657                ArrayExpr last = elements.get(index); 
    658658                elements.set(index, addOneMultiDim(last, dim, expr)); 
    659                 return new ArrayElements(span, false, _dim, elements); 
     659                return ExprFactory.makeArrayElements(span, _dim, elements); 
    660660            } 
    661661        } else { 
     
    675675            elems.add(_init); 
    676676            elems.add(multiDimElement(expr)); 
    677             ArrayElements result = new ArrayElements(spanTwo(_init,expr), false, 
    678                                                      pair.getA(), elems); 
     677            ArrayElements result = ExprFactory.makeArrayElements(spanTwo(_init,expr), 
     678                                                                 pair.getA(), elems); 
    679679            for (Pair<Integer,Expr> _pair : rest.subList(1, rest.size())) { 
    680680                int _dim   = _pair.getA(); 
     
    688688 
    689689    public static ArrayElements finalizeArrayExpr(ArrayElements a) { 
    690         return new ArrayElements(a.getSpan(), a.isParenthesized(), 
    691                                  a.getStaticArgs(), a.getDimension(), 
    692                                  a.getElements(), true); 
     690        return ExprFactory.makeArrayElements(a, true); 
    693691    } 
    694692 
    695693    public static ArrayElements addStaticArgsToArrayExpr(List<StaticArg> sargs, 
    696694                                                         ArrayElements a) { 
    697         return new ArrayElements(a.getSpan(), a.isParenthesized(), 
    698                                  sargs, a.getDimension(), 
    699                                  a.getElements(), true); 
     695        return ExprFactory.makeArrayElements(a, sargs, true); 
    700696    } 
    701697