Changeset 3112

Show
Ignore:
Timestamp:
11/26/08 16:48:07 (12 months ago)
Author:
sukyoungryu
Message:

[ast refactoring] Got rid of objectExprs and functionalMethodNames fields from Component, replaced with appropriate top-level decl nodes.

Location:
trunk/ProjectFortress
Files:
14 modified

Legend:

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

    r3111 r3112  
    141141             * CompilationUnit ::= Component | Api 
    142142             */ 
    143             abstract CompilationUnit(APIName name, List<Import> imports); 
     143            abstract CompilationUnit(APIName name, List<Import> imports, 
     144                                     List<Decl> decls); 
    144145                /** 
    145146                 * component declaration 
     
    151152                 *       end 
    152153                 */ 
    153                 Component(boolean _native = false, 
    154                           List<APIName> exports, List<Decl> decls, 
    155                           List<_RewriteObjectExpr> objectExprs = 
    156                                Collections.<_RewriteObjectExpr>emptyList(), 
    157                           List<String> functionalMethodNames = 
    158                                Collections.<String>emptyList()); 
    159                 /* the list of object expressions is a temporary hack to allow 
    160                    progress towards earlier rewriting and caching of ASTs. -- DRC */ 
     154                Component(boolean _native = false, List<APIName> exports); 
    161155                /** 
    162156                 * API declaration 
     
    166160                 *       end 
    167161                 */ 
    168                 Api(List<Decl> decls); 
     162                Api(); 
    169163            /** 
    170164             * import statement 
     
    343337                VarDecl(List<LValue> lhs, Option<Expr> init); 
    344338                /** 
    345                  * Overloading specification 
    346                  */ 
    347                 _RewriteFnOverloadDecl(IdOrOpName name, 
    348                                        List<IdOrOpName> fns); 
    349                 /** 
    350339                 * functional declaration in components or APIs 
    351340                 * Names must be unqualified. 
     
    384373                       Option<Id> implementsUnambiguousName = Option.<Id>none()) 
    385374                      implements Applicable, GenericDecl; 
     375                /** 
     376                 * Overloading specification 
     377                 */ 
     378                _RewriteFnOverloadDecl(IdOrOpName name, List<IdOrOpName> fns); 
     379                /* the list of object expressions is a temporary hack to allow 
     380                   progress towards earlier rewriting and caching of ASTs. -- DRC */ 
     381                /** 
     382                 * Lifted object expressions 
     383                 */ 
     384                _RewriteObjectExprDecl(List<_RewriteObjectExpr> objectExprs); 
     385                /** 
     386                 * Injected functional methods 
     387                 */ 
     388                _RewriteFunctionalMethodDecl(List<String> functionalMethodNames); 
    386389                /** 
    387390                 * dimension and unit declaration 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/ObjectExpressionVisitor.java

    r3107 r3112  
    171171    @Override 
    172172    public Node forComponentOnly(Component that, APIName name_result, 
    173                                      List<Import> imports_result, 
    174                                      List<APIName> exports_result, 
    175                                      List<Decl> decls_result, 
    176                                      List<_RewriteObjectExpr> objectExprs) { 
    177         // note objectExprs parameter is a temporary hack. 
     173                                 List<Import> imports_result, 
     174                                 List<Decl> decls_result, 
     175                                 List<APIName> exports_result) { 
    178176        decls_result.addAll(newObjectDecls); 
    179177        return super.forComponentOnly(that, name_result, 
    180                         imports_result, exports_result, decls_result, objectExprs); 
     178                        imports_result, decls_result, exports_result); 
    181179    } 
    182180 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/SubtypeCheckerJUTest.java

    r3096 r3112  
    356356        Component ast = new Component(span, NodeFactory.makeAPIName(span, name), 
    357357                                      Collections.<Import>emptyList(), 
    358                                       Collections.<APIName>emptyList(), 
    359                                       traitDecls); 
     358                                      traitDecls, 
     359                                      Collections.<APIName>emptyList()); 
    360360        return new ComponentIndex(ast, 
    361361                                  Collections.<Id, Variable>emptyMap(), 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeAnalyzerJUTest.java

    r3109 r3112  
    429429        Component ast = new Component(span, NodeFactory.makeAPIName(name), 
    430430                                      Collections.<Import>emptyList(), 
    431                                       Collections.<APIName>emptyList(), 
    432                                       traitDecls); 
     431                                      traitDecls, 
     432                                      Collections.<APIName>emptyList()); 
    433433        return new ComponentIndex(ast, 
    434434                                  Collections.<Id, Variable>emptyMap(), 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java

    r3111 r3112  
    20122012        @Override 
    20132013        public TypeCheckerResult forComponentOnly(Component that, 
    2014                         TypeCheckerResult name_result, 
    2015                         List<TypeCheckerResult> imports_result, 
    2016                         List<TypeCheckerResult> exports_result, 
    2017                         List<TypeCheckerResult> decls_result, 
    2018                         List<TypeCheckerResult> objectExprs 
    2019         ) { 
    2020                 // note objectExprs parameter is a temporary hack. 
    2021                 // It should be ok to ignore it below, because it is 
    2022                 // empty until a later phase. 
    2023  
     2014                                                  TypeCheckerResult name_result, 
     2015                                                  List<TypeCheckerResult> imports_result, 
     2016                                                  List<TypeCheckerResult> decls_result, 
     2017                                                  List<TypeCheckerResult> exports_result) { 
    20242018                Component new_comp = 
    20252019                        new Component(that.getSpan(), 
    20262020                                        (APIName)name_result.ast(), 
    20272021                                        (List<Import>)TypeCheckerResult.astFromResults(imports_result), 
     2022                                        (List<Decl>)TypeCheckerResult.astFromResults(decls_result), 
    20282023                                        that.is_native(), 
    2029                                         (List<APIName>)TypeCheckerResult.astFromResults(exports_result), 
    2030                                         (List<Decl>)TypeCheckerResult.astFromResults(decls_result)); 
     2024                                        (List<APIName>)TypeCheckerResult.astFromResults(exports_result)); 
    20312025 
    20322026                return TypeCheckerResult.compose(new_comp, 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/env/ComponentWrapper.java

    r3078 r3112  
    168168        Component comp = (Component) comp_unit; 
    169169 
    170             for (_RewriteObjectExpr oe : comp.getObjectExprs()) { 
     170            for (_RewriteObjectExpr oe : NodeUtil.getObjectExprs( comp )) { 
    171171                String name = oe.getGenSymName(); 
    172172                List<StaticParam> params = oe.getStaticParams(); 
     
    201201    public Set<String> getFunctionals() { 
    202202        if (transformed != null) { 
    203             return Useful.set(transformed.getFunctionalMethodNames()); 
     203            return Useful.set(NodeUtil.getFunctionalMethodNames( transformed )); 
    204204        } 
    205205        return desugarer.functionals; 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/BuildEnvironments.java

    r3102 r3112  
    170170    } 
    171171 
    172  
    173  
    174  
    175172     protected static void doDefs(BuildEnvironments inner, List<Decl> defs) { 
    176173        for (Decl def : defs) { 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/BuildTopLevelEnvironments.java

    r3096 r3112  
    4646import com.sun.fortress.nodes.TraitDecl; 
    4747import com.sun.fortress.nodes._RewriteFnOverloadDecl; 
     48import com.sun.fortress.nodes._RewriteObjectExprDecl; 
     49import com.sun.fortress.nodes._RewriteFunctionalMethodDecl; 
    4850import com.sun.fortress.nodes_util.NodeUtil; 
    4951 
     
    139141        return null; 
    140142 
     143    } 
     144 
     145    public Boolean for_RewriteObjectExprDecl(_RewriteObjectExprDecl x) { 
     146        return null; 
     147    } 
     148 
     149    public Boolean for_RewriteFunctionalMethodDecl(_RewriteFunctionalMethodDecl x) { 
     150        return null; 
    141151    } 
    142152 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java

    r3107 r3112  
    666666        List<Decl> decls_result = recurOnListOfDecl(com.getDecls()); 
    667667 
     668        decls_result.add( new _RewriteObjectExprDecl(com.getSpan(), objectExprs) ); 
     669        decls_result.add( new _RewriteFunctionalMethodDecl(com.getSpan(), Useful.list(functionals)) ); 
     670 
    668671        AbstractNode nn = 
    669672         new Component(com.getSpan(), 
    670                  name_result, imports_result, com.is_native(), 
    671                  exports_result, decls_result, 
    672                  objectExprs, Useful.list(functionals)); 
     673                       name_result, imports_result, decls_result, 
     674                       com.is_native(), exports_result); 
    673675 
    674676        if (debug && ! suppressDebugDump) 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeUtil.java

    r3107 r3112  
    3737 
    3838public class NodeUtil { 
     39 
     40    public static List<_RewriteObjectExpr> getObjectExprs(Component comp) { 
     41        for ( Decl d : comp.getDecls() ) { 
     42            if ( d instanceof _RewriteObjectExprDecl ) 
     43                return ((_RewriteObjectExprDecl)d).getObjectExprs(); 
     44        } 
     45        return new ArrayList<_RewriteObjectExpr>(); 
     46    } 
     47 
     48    public static List<String> getFunctionalMethodNames(Component comp) { 
     49        for ( Decl d : comp.getDecls() ) { 
     50            if ( d instanceof _RewriteFunctionalMethodDecl ) 
     51                return ((_RewriteFunctionalMethodDecl)d).getFunctionalMethodNames(); 
     52        } 
     53        return new ArrayList<String>(); 
     54    } 
    3955 
    4056    /* get the declared name of a component or api */ 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/Compilation.rats

    r3099 r3112  
    6868       String file = span.begin.getFileName(); 
    6969       APIName name = NodeFactory.makeAPINameFromPath(span, file, "\\."); 
    70        yyValue = new Component(span, name, a1, a2, a3); 
     70       yyValue = new Component(span, name, a1, a3, a2); 
    7171     } 
    7272   / a1:Imports w semicolon? a2:(w yyValue:AbsDecls w semicolon?)? 
     
    120120       if (a5 == null) a5 = Collections.<Decl>emptyList(); 
    121121       if (a1 == null) 
    122            yyValue = new Component(span, a2, a3, a4, a5); 
     122           yyValue = new Component(span, a2, a3, a5, a4); 
    123123       else 
    124            yyValue = new Component(span, a2, a3, true, a4, a5); 
     124           yyValue = new Component(span, a2, a3, a5, true, a4); 
    125125     }; 
    126126 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/preparser/PreCompilation.rats

    r3099 r3112  
    6262       String file = span.begin.getFileName(); 
    6363       APIName name = NodeFactory.makeAPINameFromPath(span, file, "\\."); 
    64        yyValue = new Component(span, name, a1, a2, a3); 
     64       yyValue = new Component(span, name, a1, a3, a2); 
    6565     } 
    6666   / _ 
     
    9696       Span span = createSpan(yyStart,yyCount); 
    9797       if (a1 == null) 
    98            yyValue = new Component(span, a2, a3, a4, a5); 
     98           yyValue = new Component(span, a2, a3, a5, a4); 
    9999       else 
    100            yyValue = new Component(span, a2, a3, true, a4, a5); 
     100           yyValue = new Component(span, a2, a3, a5, true, a4); 
    101101     }; 
    102102 
  • trunk/ProjectFortress/src/com/sun/fortress/parser_util/NameAndImportCollector.java

    r2898 r3112  
    4444 
    4545        @Override 
    46         public List<Import> forComponentOnly(Component that, 
    47                         List<Import> name_result, List<List<Import>> imports_result, 
    48                         List<List<Import>> exports_result, List<List<Import>> decls_result, 
    49                         List<List<Import>> objectExprs) { 
    50                 // note objectExprs parameter is a temporary hack. 
     46            public List<Import> forComponentOnly(Component that, 
     47                                                 List<Import> name_result, List<List<Import>> imports_result, 
     48                                                 List<List<Import>> decls_result, 
     49                                                 List<List<Import>> exports_result) { 
    5150                this.namesAndImports = new NameAndImportCollection(); 
    5251                this.namesAndImports.setComponentName(that.getName()); 
     
    5453 
    5554                return super.forComponentOnly(that, name_result, imports_result, 
    56                                 exports_result, decls_result, objectExprs); 
     55                                              decls_result, exports_result); 
    5756        } 
    5857 
  • trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java

    r3111 r3112  
    277277    @Override public String forComponentOnly(Component that, String name_result, 
    278278                                             List<String> imports_result, 
    279                                              List<String> exports_result, 
    280279                                             List<String> decls_result, 
    281                                              List<String> objectExprs) { 
     280                                             List<String> exports_result) { 
    282281        inComponent = true; 
    283282        // note objectExprs parameter is a temporary hack. 
     
    596595    } 
    597596 
     597    @Override public String for_RewriteObjectExprDeclOnly(_RewriteObjectExprDecl that, 
     598                                                          List<String> objExprs_result) { 
     599        return "(* _RewriteObjectExprDecl() *)"; 
     600    } 
     601 
     602    @Override public String for_RewriteFunctionalMethodDeclOnly(_RewriteFunctionalMethodDecl that) { 
     603        return "(* _RewriteFunctionalMethodDecl() *)"; 
     604    } 
    598605 
    599606    /****************************************/