Changeset 3107

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

[ast refactoring] Eliminated subclasses of Param: NormalParam? and VarargsParam?

Location:
trunk/ProjectFortress
Files:
27 modified

Legend:

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

    r3105 r3107  
    4747customPreprocessor com.sun.fortress.astgen.EllipsesNodeCreator; 
    4848customPreprocessor com.sun.fortress.astgen.TemplateGapNodeCreator; 
    49  
    5049customGenerator com.sun.fortress.astgen.UpdateVisitorGenerator; 
    5150customGenerator com.sun.fortress.astgen.TemplateVisitorGenerator; 
     
    5453 
    5554customGenerator com.sun.fortress.astgen.FortressAstGenerator; 
    56  
    5755 
    5856package com.sun.fortress.nodes; 
     
    643641             * value parameter of functional declarations and object declarations 
    644642             * Names must be unqualified. 
    645              */ 
    646             abstract Param(List<Modifier> mods = Collections.<Modifier>emptyList(), 
    647                            Id name); 
    648                 /** 
    649                  * ValParam := BindId 
    650                  *           | ( Params? ) 
    651                  * Params ::= (Param, )* (Varargs, )? Keyword(, Keyword)* 
    652                  *          | (Param, )* Varargs 
    653                  *          | Param(, Param)* 
    654                  * Keyword ::= Param = Expr 
    655                  * Param ::= BindId IsType? 
    656                  *         | Type 
    657                  * e.g.) x: ZZ32 = 3 
    658                  * e.g.) self 
    659                  */ 
    660                 NormalParam(Option<Type> type = Option.<Type>none(), 
    661                             Option<Expr> defaultExpr = Option.<Expr>none()) 
    662                            implements Lhs, ImplicitGetterSetter; 
    663                 /** 
    664                  * varargs parameter 
    665                  * Varargs ::= BindId : Type ... 
    666                  * e.g.) x: String... 
    667                  */ 
    668                 VarargsParam(Option<Type> varargsType = Option.<Type>none()); 
     643             * ValParam := BindId 
     644             *           | ( Params? ) 
     645             * Params ::= (Param, )* (Varargs, )? Keyword(, Keyword)* 
     646             *          | (Param, )* Varargs 
     647             *          | Param(, Param)* 
     648             * Keyword ::= Param = Expr 
     649             * Param ::= BindId IsType? 
     650             *         | Type 
     651             * Varargs ::= BindId : Type ... 
     652             * e.g.) x: ZZ32 = 3 
     653             * e.g.) self 
     654             * e.g.) x: String... 
     655             */ 
     656            Param(List<Modifier> mods = Collections.<Modifier>emptyList(), 
     657                  Id name, 
     658                  Option<Type> type = Option.<Type>none(), 
     659                  Option<Expr> defaultExpr = Option.<Expr>none(), 
     660                  Option<Type> varargsType = Option.<Type>none()) 
     661                 implements Lhs, ImplicitGetterSetter; 
    669662            /** 
    670663             * expression 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/IndexBuilder.java

    r3096 r3107  
    327327                fields.put(paramName, new ParamVariable(p)); 
    328328                if (!mods.isHidden) { 
    329                     if ( p instanceof NormalParam) 
    330                         getters.put(paramName, new FieldGetterMethod((NormalParam)p, name)); 
     329                    if ( p.getVarargsType().isNone() ) 
     330                        getters.put(paramName, new FieldGetterMethod(p, name)); 
    331331                    else 
    332332                        bug(p, "Varargs object parameters should not define getters."); 
    333333                } 
    334334                if (mods.isSettable || mods.isVar) { 
    335                     if ( p instanceof NormalParam) 
    336                         setters.put(paramName, new FieldSetterMethod((NormalParam)p, name)); 
     335                    if ( p.getVarargsType().isNone() ) 
     336                        setters.put(paramName, new FieldSetterMethod(p, name)); 
    337337                    else 
    338338                        bug(p, "Varargs object parameters should not define setters."); 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/DesugaringVisitor.java

    r3101 r3107  
    159159    private static Option<List<Param>> mangleParams(Option<List<Param>> params) { 
    160160        return new NodeUpdateVisitor() { 
    161             public Node forNormalParam(NormalParam that) { 
    162                 return NodeFactory.makeParam(that, mangleName(that.getName())); 
     161            public Node forParam(Param that) { 
     162                if ( that.getVarargsType().isNone() ) 
     163                    return NodeFactory.makeParam(that, mangleName(that.getName())); 
     164                else 
     165                    return that; 
    163166            } 
    164167        }.recurOnOptionOfListOfParam(params); 
     
    173176        if (params.isSome()) { 
    174177            for (Param param: params.unwrap()) { 
    175                 if (param instanceof NormalParam) 
     178                if ( param.getVarargsType().isNone() ) 
    176179                    newScope.add(param.getName()); 
    177180            } 
     
    316319        if (params.isSome()) { 
    317320            for (Param param : params.unwrap()) { 
    318                 if (param instanceof NormalParam) { 
    319                     NormalParam _param = (NormalParam)param; 
    320                     if (! hidden(_param) && 
    321                         ! hasExplicitGetter(_param.getName(), decls)) 
    322                         result.add(makeGetter(false, owner, _param)); 
    323                     if ((settable(_param) || mutable(_param)) && 
    324                         ! hasExplicitSetter(_param.getName(), decls)) { 
    325                         result.add(makeSetter(false, owner, _param)); 
     321                if ( param.getVarargsType().isNone() ) { 
     322                    if (! hidden(param) && 
     323                        ! hasExplicitGetter(param.getName(), decls)) 
     324                        result.add(makeGetter(false, owner, param)); 
     325                    if ((settable(param) || mutable(param)) && 
     326                        ! hasExplicitSetter(param.getName(), decls)) { 
     327                        result.add(makeSetter(false, owner, param)); 
    326328                    } 
    327329                } 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/ObjectExpressionVisitor.java

    r3102 r3107  
    393393         * expression captured mutable variables (they would be boxed). 
    394394         * We only store the function id and type pair as value because 
    395          * that's all we need.  If we store the NormalParam instead, we 
     395         * that's all we need.  If we store the Param instead, we 
    396396         * would have to dig those info out again. 
    397397         */ 
     
    594594                            exit.getExprType(), exit.getTarget(), var); 
    595595                        exitFnExprParams.add( 
    596                             NodeFactory.makeNormalParam(exitSpan, 
     596                            NodeFactory.makeParam(exitSpan, 
    597597                                exitWithId, exitWithTypeOp) ); 
    598598                    } else { 
     
    641641 
    642642        Option<List<Param>> params = null; 
    643         NormalParam enclosingSelf = null; 
     643        Param enclosingSelf = null; 
    644644 
    645645        List<StaticParam> staticParams = 
     
    663663 
    664664        if(enclosingSelf != null) { 
    665             VarRef receiver = makeVarRefFromNormalParam(enclosingSelf); 
     665            VarRef receiver = makeVarRefFromParam(enclosingSelf); 
    666666            DottedMethodRewriteVisitor rewriter = 
    667667                new DottedMethodRewriteVisitor(receiver, freeMethodRefs); 
     
    718718    makeParamsForLiftedObj(ObjectExpr target, 
    719719                           FreeNameCollection freeNames, 
    720                            NormalParam enclosingSelfParam, 
     720                           Param enclosingSelfParam, 
    721721                           Map<Pair<Span,Id>,Pair<Id,Type>> exitFnParamMap) { 
    722722 
    723723        Option<Type> type = null; 
    724         NormalParam param = null; 
     724        Param param = null; 
    725725        List<Param> params = new LinkedList<Param>(); 
    726726        List<VarRef> freeVarRefs = freeNames.getFreeVarRefs(); 
     
    745745                    // FIXME: what span should I use? 
    746746                    type = var.getExprType(); 
    747                     param = NodeFactory.makeNormalParam(var.getSpan(), 
     747                    param = NodeFactory.makeParam(var.getSpan(), 
    748748                                                        var.getVar(), type); 
    749749                    params.add(param); 
     
    758758                // FIXME: what span should I use? 
    759759                type = fn.getExprType(); 
    760                 param = NodeFactory.makeNormalParam(fn.getSpan(), 
     760                param = NodeFactory.makeParam(fn.getSpan(), 
    761761                                                    fn.getOriginalName(), type); 
    762762                params.add(param); 
     
    787787                Id exitFnId = NodeFactory.makeId(exitSpan, 
    788788                        MANGLE_CHAR + EXIT_FUNC_PREFIX + "_" + exitIndex); 
    789                 param = NodeFactory.makeNormalParam(exitSpan, exitFnId, type); 
     789                param = NodeFactory.makeParam(exitSpan, exitFnId, type); 
    790790                params.add(param); 
    791791                Pair<Span, Id> exitKey = new Pair<Span,Id>(exitSpan, label); 
     
    804804 
    805805 
    806     private NormalParam makeEnclosingSelfParam(Span paramSpan, 
     806    private Param makeEnclosingSelfParam(Span paramSpan, 
    807807                                        Option<Type> enclosingSelfType) { 
    808         NormalParam param = null; 
     808        Param param = null; 
    809809 
    810810        // Just sanity check 
     
    817817        Id enclosingParamId = NodeFactory.makeId(paramSpan, 
    818818                MANGLE_CHAR + ENCLOSING_PREFIX + "_" + objExprNestingLevel); 
    819         param = NodeFactory.makeNormalParam(paramSpan, 
     819        param = NodeFactory.makeParam(paramSpan, 
    820820                                        enclosingParamId, enclosingSelfType); 
    821821 
     
    880880    } 
    881881 
    882     private VarRef makeVarRefFromNormalParam(NormalParam param) { 
     882    private VarRef makeVarRefFromParam(Param param) { 
    883883        VarRef varRef = ExprFactory.makeVarRef( param.getSpan(), 
    884884                                                param.getName(), 
     
    10211021//                 Option<Node> declNodeOp = 
    10221022//                     typeEnv.declarationSite( varRef.getVar() ); 
    1023 //                 NormalParam param = null; 
     1023//                 Param param = null; 
    10241024//                 if( declNodeOp.isSome() ) { 
    10251025//                     param = makeVarParamFromVarRef( varRef, 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/desugarer/VarRefContainer.java

    r3102 r3107  
    3232import com.sun.fortress.nodes.ModifierSettable; 
    3333import com.sun.fortress.nodes.Node; 
    34 import com.sun.fortress.nodes.NormalParam; 
    3534import com.sun.fortress.nodes.ObjectDecl; 
    3635import com.sun.fortress.nodes.Param; 
     
    9291    public ObjectDecl containerDecl() { 
    9392        List<Param> params = new LinkedList<Param>(); 
    94         NormalParam param = makeVarParamFromVarRef( origVar, 
     93        Param param = makeVarParamFromVarRef( origVar, 
    9594                                origDeclNode.getSpan(), origVar.getExprType() ); 
    9695        params.add(param); 
     
    107106    } 
    108107 
    109     public NormalParam containerTypeParam() { 
    110         return new NormalParam( origDeclNode.getSpan(), 
    111                                 containerVarId(), containerType() ); 
     108    public Param containerTypeParam() { 
     109        return new Param( origDeclNode.getSpan(), 
     110                          containerVarId(), containerType() ); 
    112111    } 
    113112 
     
    146145    } 
    147146 
    148     private NormalParam makeVarParamFromVarRef(VarRef var, 
     147    private Param makeVarParamFromVarRef(VarRef var, 
    149148                                               Span paramSpan, 
    150149                                               Option<Type> typeOp) { 
    151150        List<Modifier> mods = new LinkedList<Modifier>(); 
    152151        mods.add( new ModifierSettable(paramSpan) ); 
    153         NormalParam param = new NormalParam(paramSpan, mods, 
    154                                             var.getVar(), typeOp); 
     152        Param param = new Param(paramSpan, mods, 
     153                                var.getVar(), typeOp); 
    155154        return param; 
    156155    } 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/disambiguator/SelfParamDisambiguator.java

    r3096 r3107  
    2828import com.sun.fortress.nodes.Node; 
    2929import com.sun.fortress.nodes.NodeUpdateVisitor; 
    30 import com.sun.fortress.nodes.NormalParam; 
    3130import com.sun.fortress.nodes.ObjectDecl; 
    3231import com.sun.fortress.nodes.ObjectExpr; 
     32import com.sun.fortress.nodes.Param; 
    3333import com.sun.fortress.nodes.TraitDecl; 
    3434import com.sun.fortress.nodes.Type; 
     
    9393                        int traitNestingDepth = 0; 
    9494                @Override 
    95                         public Node forNormalParamOnly(NormalParam that, 
    96                                         List<Modifier> mods_result, Id name_result, 
    97                                         Option<Type> type_result, Option<Expr> defaultExpr_result) { 
     95                        public Node forParamOnly(Param that, 
     96                                                 List<Modifier> mods_result, Id name_result, 
     97                                                 Option<Type> type_result, 
     98                                                 Option<Expr> defaultExpr_result, 
     99                                                 Option<Type> varargsType_result) { 
     100                    if ( varargsType_result.isNone() ) { 
    98101                        // my type is broken I need to qualify the type name 
    99102                        Option<Type> new_type; 
     
    103106                                new_type = type_result; 
    104107 
    105                         return new NormalParam(that.getSpan(), 
    106                                        that.getMods(), 
    107                                        that.getName(), 
    108                                        new_type, 
    109                                        that.getDefaultExpr()); 
    110                         } 
     108                        return new Param(that.getSpan(), 
     109                                         that.getMods(), 
     110                                         that.getName(), 
     111                                         new_type, 
     112                                         that.getDefaultExpr(), 
     113                                         that.getVarargsType()); 
     114                    } else 
     115                        return that; 
     116                } 
    111117 
    112118                        // end recurrance here 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/index/FieldSetterMethod.java

    r2600 r3107  
    2929import com.sun.fortress.nodes.Modifier; 
    3030import com.sun.fortress.nodes.NodeUpdateVisitor; 
    31 import com.sun.fortress.nodes.NormalParam; 
    3231import com.sun.fortress.nodes.Param; 
    3332import com.sun.fortress.nodes.StaticArg; 
     
    5958        public List<Param> parameters() { 
    6059            // return the implicit parameter 
    61             Param p = new NormalParam(_ast.getSpan(), Collections.<Modifier>emptyList(),  
    62                     new Id(_ast.getSpan(), "fakeParamForImplicitSetter"), _ast.getType(),  
    63                     Option.<Expr>none()); 
     60            Param p = new Param(_ast.getSpan(), Collections.<Modifier>emptyList(), 
     61                                new Id(_ast.getSpan(), "fakeParamForImplicitSetter"), _ast.getType(), 
     62                                Option.<Expr>none()); 
    6463                return Collections.singletonList(p); 
    6564        } 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/FnTypeEnv.java

    r3099 r3107  
    4040import com.sun.fortress.nodes.IntersectionType; 
    4141import com.sun.fortress.nodes.Node; 
    42 import com.sun.fortress.nodes.NormalParam; 
    4342import com.sun.fortress.nodes.Param; 
    4443import com.sun.fortress.nodes.StaticArg; 
     
    8685        for( Param param : fn.getParams() ) { 
    8786                if( param.getName().equals(IndexBuilder.SELF_NAME) ) { 
    88                         if( param instanceof NormalParam ) 
    89                                 self_type_ = ((NormalParam)param).getType(); 
     87                    if( param.getVarargsType().isNone() ) 
     88                                self_type_ = param.getType(); 
    9089                        else 
    9190                                InterpreterBug.bug("self cannot be a varargs."); 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/InferenceVarInserter.java

    r3105 r3107  
    2929import com.sun.fortress.nodes.Node; 
    3030import com.sun.fortress.nodes.NodeUpdateVisitor; 
    31 import com.sun.fortress.nodes.NormalParam; 
    3231import com.sun.fortress.nodes.Param; 
    3332import com.sun.fortress.nodes.StaticParam; 
     
    8079 
    8180        @Override 
    82         public Node forNormalParamOnly(NormalParam that, 
    83                         List<Modifier> mods_result, Id name_result, 
    84                         Option<Type> type_result, Option<Expr> defaultExpr_result) { 
     81        public Node forParamOnly(Param that, 
     82                                 List<Modifier> mods_result, Id name_result, 
     83                                 Option<Type> type_result, 
     84                                 Option<Expr> defaultExpr_result, 
     85                                 Option<Type> varargsType_result) { 
     86            if ( varargsType_result.isNone() ) { 
    8587                // Is the type given? 
    8688                Option<Type> new_type = 
     
    8991                                                type_result; 
    9092 
    91                 return super.forNormalParamOnly(that, mods_result, name_result, new_type, 
    92                                 defaultExpr_result); 
     93                return super.forParamOnly(that, mods_result, name_result, new_type, 
     94                                          defaultExpr_result, varargsType_result); 
     95            } else 
     96                return that; 
    9397        } 
    9498} 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeChecker.java

    r3105 r3107  
    247247 
    248248                                        public LinkedList<Type> value(LinkedList<Type> arg0, Param arg1) { 
    249                                                 if( arg1 instanceof NormalParam ) { 
     249                                            if( arg1.getVarargsType().isNone() ) { 
    250250                                                        typeCount++; 
    251                                                         arg0.add(((NormalParam)arg1).getType().unwrap()); 
     251                                                        arg0.add(arg1.getType().unwrap()); 
    252252                                                        return arg0; 
    253253                                                } 
    254                                                 else { // VarargParam, add until the sizes are equal 
     254                                            else { // a varargs param, add until the sizes are equal 
    255255                                                        int to_add = arg_size - typeCount; 
    256256                                                        while( to_add > 0 ) { 
    257                                                             arg0.add(((VarargsParam)arg1).getVarargsType().unwrap()); 
     257                                                            arg0.add(arg1.getVarargsType().unwrap()); 
    258258                                                                to_add--; 
    259259                                                        } 
     
    263263 
    264264                        //handle defaults (nyi) 
    265                         if(params.get(params.size()-1) instanceof NormalParam 
    266                                         && ((NormalParam)params.get(params.size()-1)).getDefaultExpr().isSome()){ 
     265                        if(params.get(params.size()-1).getVarargsType().isNone() 
     266                           && params.get(params.size()-1).getDefaultExpr().isSome()){ 
    267267                                return NI.nyi(); 
    268268                        } 
     
    617617                                                                field_node.accept(new NodeAbstractVisitor<Type>() { 
    618618                                                                        @Override 
    619                                                                         public Type forNormalParam(NormalParam that) { return that.getType().unwrap(); } 
    620  
    621                                                                         @Override 
    622                                                                         public Type forVarargsParam(VarargsParam that) { return that.getVarargsType().unwrap(); } 
     619                                                                        public Type forParam(Param that) { 
     620                                                                            if ( that.getVarargsType().isNone() ) 
     621                                                                                return that.getType().unwrap(); 
     622                                                                            else 
     623                                                                                return that.getVarargsType().unwrap(); 
     624                                                                        } 
    623625                                                                }); 
    624626 
     
    14321434 
    14331435                        @Override 
    1434                         public Pair<TypeCheckerResult, Type> forNormalParam(NormalParam that) { 
     1436                        public Pair<TypeCheckerResult, Type> forParam(Param that) { 
     1437                            if ( that.getVarargsType().isNone() ) { 
    14351438                                if( !NodeUtil.isMutable(that) ) { 
    14361439                                        String err = "Left-hand side of assignment must be mutable."; 
     
    14441447                                                        lhs_type); 
    14451448                                } 
     1449                            } else 
     1450                                return bug(that, "Varargs parameter should not appear in the left-hand side of an assignment."); 
    14461451                        } 
    14471452 
     
    23782383                Boolean varargs=false; 
    23792384                for(Param p: that.getParams()){ 
    2380                         if(p instanceof NormalParam){ 
    2381                                 NormalParam n = (NormalParam)p; 
    2382                                 if(n.getType().isSome()){ 
    2383                                         dlist.add(n.getType().unwrap()); 
    2384                                 } 
    2385                                 else{ 
    2386                                         NI.nyi(); 
    2387                                 } 
    2388                         } 
    2389                         if(p instanceof VarargsParam){ 
    2390                                 VarargsParam v = (VarargsParam) p; 
    2391                                 dlist.add(v.getVarargsType().unwrap()); 
    2392                                 varargs=true; 
    2393                         } 
     2385                    if(p.getVarargsType().isNone()){ 
     2386                        if(p.getType().isSome()){ 
     2387                            dlist.add(p.getType().unwrap()); 
     2388                        } 
     2389                        else{ 
     2390                            NI.nyi(); 
     2391                        } 
     2392                    } else { 
     2393                        dlist.add(p.getVarargsType().unwrap()); 
     2394                        varargs=true; 
     2395                    } 
    23942396                } 
    23952397                AbstractTupleType domain; 
     
    33563358 
    33573359        @Override 
    3358         public TypeCheckerResult forNormalParam(NormalParam that) { 
    3359                 // No checks needed to be performed on a NormalParam. 
     3360        public TypeCheckerResult forParam(Param that) { 
     3361                // No checks needed to be performed on a Param. 
    33603362                return new TypeCheckerResult(that); 
    33613363        } 
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/typechecker/TypeEnv.java

    r3105 r3107  
    6666import com.sun.fortress.nodes.NodeAbstractVisitor; 
    6767import com.sun.fortress.nodes.NodeDepthFirstVisitor; 
    68 import com.sun.fortress.nodes.NormalParam; 
    6968import com.sun.fortress.nodes.Op; 
    7069import com.sun.fortress.nodes.OpArg; 
     
    7978import com.sun.fortress.nodes.UnitParam; 
    8079import com.sun.fortress.nodes.UnitRef; 
    81 import com.sun.fortress.nodes.VarargsParam; 
    8280import com.sun.fortress.nodes._InferenceVarType; 
    8381import com.sun.fortress.nodes._RewriteGenericArrowType; 
     
    133131     */ 
    134132    protected static Option<Type> typeFromParam(Param param) { 
    135         if (param instanceof NormalParam) { 
    136             NormalParam _param = (NormalParam) param; 
    137             return _param.getType(); 
    138         } else { // param instanceof VarargsParam 
     133        if (param.getVarargsType().isNone()) { 
     134            return param.getType(); 
     135        } else { // a varargs param 
    139136            // Convert the declared varargs type into a reference to 
    140137            // FortressBuiltin.ImmutableHeapSequence. 
    141             VarargsParam _param = (VarargsParam) param; 
    142  
    143             Type result = Types.makeVarargsParamType(_param.getVarargsType().unwrap()); 
     138            Type result = Types.makeVarargsParamType(param.getVarargsType().unwrap()); 
    144139            return some(result); 
    145140        } 
     
    166161 
    167162        for (Param param: params) { 
    168             if (param instanceof NormalParam) { 
    169                 NormalParam _param = (NormalParam) param; 
    170                 Option<Type> maybeType = _param.getType(); 
     163            if (param.getVarargsType().isNone()) { 
     164                Option<Type> maybeType = param.getType(); 
    171165 
    172166                if (maybeType.isSome()) { // An explicit type is declared. 
    173                     if (_param.getDefaultExpr().isSome()) { // We have a keyword param. 
    174                         keywordTypes.add(makeKeywordType(_param.getName(), maybeType.unwrap())); 
     167                    if (param.getDefaultExpr().isSome()) { // We have a keyword param. 
     168                        keywordTypes.add(makeKeywordType(param.getName(), maybeType.unwrap())); 
    175169                    } else { // We have an ordinary param. 
    176170                        paramTypes.add(maybeType.unwrap()); 
    177171                    } 
    178172                } else { // No type is explicitly declared for this parameter. 
    179                     if (_param.getDefaultExpr().isSome()) { // We have a keyword param. 
    180                         keywordTypes.add(makeKeywordType(_param.getName(), NodeFactory.make_InferenceVarType(_param.getSpan()))); 
     173                    if (param.getDefaultExpr().isSome()) { // We have a keyword param. 
     174                        keywordTypes.add(makeKeywordType(param.getName(), NodeFactory.make_InferenceVarType(param.getSpan()))); 
    181175                    } else { // We have an ordinary param. 
    182                         paramTypes.add(NodeFactory.make_InferenceVarType(_param.getSpan())); 
     176                        paramTypes.add(NodeFactory.make_InferenceVarType(param.getSpan())); 
    183177                    } 
    184178                } 
    185179            } else { // We have a varargs param. 
    186                 VarargsParam _param = (VarargsParam) param; 
    187                 varargsType = some(_param.getVarargsType().unwrap()); 
     180                varargsType = some(param.getVarargsType().unwrap()); 
    188181            } 
    189182        } 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/EvalType.java

    r3105 r3107  
    170170            String pname = NodeUtil.nameString(idName); 
    171171            FType ptype; 
    172             if (in_p instanceof NormalParam) { 
    173                 Option<Type> type = ((NormalParam)in_p).getType(); 
     172            if (in_p.getVarargsType().isNone()) { 
     173                Option<Type> type = in_p.getType(); 
    174174                ptype = e.getFTypeFromOption(type, FTypeTop.ONLY); 
    175175            } 
    176             else { // in_p instanceof VarargsParam 
    177                 ptype = FTypeRest.make(e.getFType(((VarargsParam)in_p).getVarargsType().unwrap())); 
     176            else { // a varargs param 
     177                ptype = FTypeRest.make(e.getFType(in_p.getVarargsType().unwrap())); 
    178178            } 
    179179            Parameter fp = new Parameter(pname, ptype, NodeUtil.isMutable(in_p)); 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/evaluator/EvaluatorBase.java

    r3105 r3107  
    180180            Param pa = pit.next(); 
    181181 
    182             if ( ! (pa instanceof VarargsParam)) { 
     182            if ( pa.getVarargsType().isNone() ) { 
    183183                /* Tuple (or even re-tuple) arguments when inferring type 
    184184                 * if passing different # of args to 1-arg function. */ 
     
    207207            } 
    208208            try { 
    209                 if (p instanceof NormalParam) { 
    210                     Option<Type> t = ((NormalParam) p).getType(); 
     209                if (p.getVarargsType().isNone()) { 
     210                    Option<Type> t = p.getType(); 
    211211                    // why can't we just skip if missing? 
    212212                    if (t.isNone()) { 
     
    237237                        at.unify(e, tp_set, abm, ty); 
    238238                    } 
    239                 } else { // p instanceof VarargsParam 
    240                     Type ty = ((VarargsParam) p).getVarargsType().unwrap(); 
     239                } else { // a varargs param 
     240                    Type ty = p.getVarargsType().unwrap(); 
    241241                    if (DUMP_INFERENCE) 
    242242                        System.err.println("Unifying "+at+" and vararg type "+ty); 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/DesugarerVisitor.java

    r3105 r3107  
    8686import com.sun.fortress.nodes.NodeAbstractVisitor; 
    8787import com.sun.fortress.nodes.NodeAbstractVisitor_void; 
    88 import com.sun.fortress.nodes.NormalParam; 
    8988import com.sun.fortress.nodes.ObjectDecl; 
    9089import com.sun.fortress.nodes.ObjectExpr; 
  • trunk/ProjectFortress/src/com/sun/fortress/interpreter/rewrite/IsAnArrowName.java

    r3095 r3107  
    2222import com.sun.fortress.nodes.Node; 
    2323import com.sun.fortress.nodes.NodeAbstractVisitor; 
    24 import com.sun.fortress.nodes.NormalParam; 
     24import com.sun.fortress.nodes.Param; 
    2525import com.sun.fortress.nodes.TestDecl; 
    2626import com.sun.fortress.nodes.Type; 
    27 import com.sun.fortress.nodes.VarargsParam; 
    2827import com.sun.fortress.nodes_util.NodeUtil; 
    2928 
     
    7271 
    7372    /* (non-Javadoc) 
    74      * @see com.sun.fortress.nodes.NodeAbstractVisitor#forNormalParam(com.sun.fortress.nodes.NormalParam) 
     73     * @see com.sun.fortress.nodes.NodeAbstractVisitor#forParam(com.sun.fortress.nodes.Param) 
    7574     */ 
    7675    @Override 
    77     public ArrowOrFunctional forNormalParam(NormalParam that) { 
    78         return optionTypeIsArrow(that.getType()); 
    79     } 
    80  
    81     /* (non-Javadoc) 
    82      * @see com.sun.fortress.nodes.NodeAbstractVisitor#forVarargsParam(com.sun.fortress.nodes.VarargsParam) 
    83      */ 
    84     @Override 
    85     public ArrowOrFunctional forVarargsParam(VarargsParam that) { 
    86         return ArrowOrFunctional.NEITHER; 
     76    public ArrowOrFunctional forParam(Param that) { 
     77        if ( that.getVarargsType().isNone() ) 
     78            return optionTypeIsArrow(that.getType()); 
     79        else 
     80            return ArrowOrFunctional.NEITHER; 
    8781    } 
    8882 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ApiMaker.java

    r3102 r3107  
    181181                log(that, "The return type of " + that.getName() + " is required."); 
    182182            for ( Param p : that.getParams() ) { 
    183                 if ( p instanceof NormalParam && 
    184                      ((NormalParam)p).getType().isNone() && 
     183                if ( p.getType().isNone() && 
    185184                     ! p.getName().getText().equals("self") ) 
    186185                    log(p, "The type of " + p.getName() + " is required."); 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/ErrorMsgMaker.java

    r3105 r3107  
    317317    } 
    318318 
    319     public String forNormalParam(NormalParam node) { 
     319    public String forParam(Param node) { 
    320320        StringBuffer sb = new StringBuffer(); 
    321321        sb.append(NodeUtil.nameString(node.getName())); 
    322         if (node.getType().isSome()) { 
     322        if ( node.getVarargsType().isNone() ) { 
     323            if (node.getType().isSome()) { 
     324                sb.append(":"); 
     325                sb.append(node.getType().unwrap().accept(this)); 
     326            } 
     327            if (node.getDefaultExpr().isSome()) { 
     328                sb.append("="); 
     329                sb.append(node.getDefaultExpr().unwrap().accept(this)); 
     330            } 
     331        } else { 
    323332            sb.append(":"); 
    324             sb.append(node.getType().unwrap().accept(this)); 
    325         } 
    326         if (node.getDefaultExpr().isSome()) { 
    327             sb.append("="); 
    328             sb.append(node.getDefaultExpr().unwrap().accept(this)); 
    329         } 
    330         return sb.toString(); 
    331     } 
    332  
    333     public String forVarargsParam(VarargsParam node) { 
    334         StringBuffer sb = new StringBuffer(); 
    335         sb.append(NodeUtil.nameString(node.getName())); 
    336         sb.append(":"); 
    337         sb.append(node.getVarargsType().unwrap().accept(this)); 
    338         sb.append("..."); 
    339  
     333            sb.append(node.getVarargsType().unwrap().accept(this)); 
     334            sb.append("..."); 
     335        } 
    340336        return sb.toString(); 
    341337    } 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeComparator.java

    r3105 r3107  
    211211                        .compareTo(NodeUtil.nameString(right.getName())); 
    212212        if (x != 0) return x; 
    213         if ((left instanceof NormalParam) && (right instanceof NormalParam)) { 
    214             x = compareOptionalType(((NormalParam)left).getType(), ((NormalParam)right).getType()); 
    215         } 
    216         if ((left instanceof VarargsParam) && (right instanceof VarargsParam)) { 
    217             x = compareOptionalType(((VarargsParam)left).getVarargsType(), ((VarargsParam)right).getVarargsType()); 
     213        if ((left.getVarargsType().isNone()) && (right.getVarargsType().isNone())) { 
     214            x = compareOptionalType(left.getType(), right.getType()); 
     215        } 
     216        if ((left.getVarargsType().isSome()) && (right.getVarargsType().isSome())) { 
     217            x = compareOptionalType(left.getVarargsType(), right.getVarargsType()); 
    218218        } 
    219219        if (x != 0) return x; 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeFactory.java

    r3105 r3107  
    824824    } 
    825825 
    826     public static LValue makeLValue(NormalParam param) { 
     826    public static LValue makeLValue(Param param) { 
    827827        return new LValue(param.getSpan(), param.getName(), 
    828828                param.getType(), param.getMods(), false); 
     
    952952        } 
    953953 
    954     public static VarargsParam makeVarargsParam(Id name, Type type) { 
    955         return new VarargsParam(name.getSpan(), Collections.<Modifier>emptyList(), 
    956                                 name, Option.<Type>some(type)); 
    957     } 
    958  
    959     public static VarargsParam makeVarargsParam(VarargsParam param, List<Modifier> mods) { 
    960         return new VarargsParam(param.getSpan(), mods, param.getName(), param.getVarargsType()); 
    961     } 
    962  
    963     public static VarargsParam makeVarargsParam(Span span, List<Modifier> mods, 
    964                                                 Id name, Type type) { 
    965         return new VarargsParam(span, mods, name, Option.<Type>some(type)); 
    966     } 
    967  
    968     public static NormalParam makeAbsParam(Type type) { 
     954    public static Param makeVarargsParam(Id name, Type type) { 
     955        return new Param(name.getSpan(), Collections.<Modifier>emptyList(), 
     956                         name, Option.<Type>none(), Option.<Expr>none(), Option.<Type>some(type)); 
     957    } 
     958 
     959    public static Param makeVarargsParam(Param param, List<Modifier> mods) { 
     960        return new Param(param.getSpan(), mods, param.getName(), 
     961                         Option.<Type>none(), Option.<Expr>none(), 
     962                         param.getVarargsType()); 
     963    } 
     964 
     965    public static Param makeVarargsParam(Span span, List<Modifier> mods, 
     966                                         Id name, Type type) { 
     967        return new Param(span, mods, name, 
     968                         Option.<Type>none(), Option.<Expr>none(), 
     969                         Option.<Type>some(type)); 
     970    } 
     971 
     972    public static Param makeAbsParam(Type type) { 
    969973        Id id = new Id(type.getSpan(), "_"); 
    970         return new NormalParam(type.getSpan(), Collections.<Modifier>emptyList(), 
    971                                id, Option.some(type), Option.<Expr>none()); 
    972     } 
    973  
    974     public static NormalParam makeParam(Span span, List<Modifier> mods, Id name, 
    975                                         Type type) { 
    976         return new NormalParam(span, mods, name, Option.some(type), Option.<Expr>none()); 
    977     } 
    978  
    979     public static NormalParam makeParam(Span span, List<Modifier> mods, Id name, 
    980                                         Option<Type> type) { 
    981         return new NormalParam(span, mods, name, type, Option.<Expr>none()); 
    982     } 
    983  
    984     public static NormalParam makeParam(Id id, Type type) { 
    985         return new NormalParam(id.getSpan(), Collections.<Modifier>emptyList(), 
    986                 id, Option.some(type), Option.<Expr>none()); 
    987     } 
    988  
    989     public static NormalParam makeParam(Id name) { 
    990         return new NormalParam(name.getSpan(), Collections.<Modifier>emptyList(), 
    991                 name, Option.<Type>none(), Option.<Expr>none()); 
    992     } 
    993  
    994     public static NormalParam makeParam(NormalParam param, Expr expr) { 
    995         return new NormalParam(param.getSpan(), param.getMods(), param.getName(), 
    996                 param.getType(), Option.some(expr)); 
    997     } 
    998  
    999     public static NormalParam makeParam(NormalParam param, List<Modifier> mods) { 
    1000         return new NormalParam(param.getSpan(), mods, param.getName(), 
    1001                 param.getType(), param.getDefaultExpr()); 
    1002     } 
    1003  
    1004     public static NormalParam makeParam(NormalParam param, Id newId) { 
    1005         return new NormalParam(param.getSpan(), param.getMods(), newId, 
    1006                                param.getType(), param.getDefaultExpr()); 
     974        return new Param(type.getSpan(), Collections.<Modifier>emptyList(), 
     975                         id, Option.some(type), Option.<Expr>none()); 
     976    } 
     977 
     978    public static Param makeParam(Span span, List<Modifier> mods, Id name, 
     979                                  Type type) { 
     980        return new Param(span, mods, name, Option.some(type), Option.<Expr>none()); 
     981    } 
     982 
     983    public static Param makeParam(Span span, List<Modifier> mods, Id name, 
     984                                  Option<Type> type) { 
     985        return new Param(span, mods, name, type, Option.<Expr>none()); 
     986    } 
     987 
     988    public static Param makeParam(Id id, Type type) { 
     989        return new Param(id.getSpan(), Collections.<Modifier>emptyList(), 
     990                         id, Option.some(type), Option.<Expr>none()); 
     991    } 
     992 
     993    public static Param makeParam(Id name) { 
     994        return new Param(name.getSpan(), Collections.<Modifier>emptyList(), 
     995                         name, Option.<Type>none(), Option.<Expr>none()); 
     996    } 
     997 
     998    public static Param makeParam(Param param, Expr expr) { 
     999        return new Param(param.getSpan(), param.getMods(), param.getName(), 
     1000                         param.getType(), Option.some(expr)); 
     1001    } 
     1002 
     1003    public static Param makeParam(Param param, List<Modifier> mods) { 
     1004        return new Param(param.getSpan(), mods, param.getName(), 
     1005                         param.getType(), param.getDefaultExpr()); 
     1006    } 
     1007 
     1008    public static Param makeParam(Param param, Id newId) { 
     1009        return new Param(param.getSpan(), param.getMods(), newId, 
     1010                         param.getType(), param.getDefaultExpr()); 
    10071011    } 
    10081012 
     
    10491053    } 
    10501054 
    1051     public static NormalParam makeNormalParam(Span span, Id name, Option<Type> type) { 
    1052         return new NormalParam(span, name, type); 
     1055    public static Param makeParam(Span span, Id name, Option<Type> type) { 
     1056        return new Param(span, name, type); 
    10531057    } 
    10541058 
  • trunk/ProjectFortress/src/com/sun/fortress/nodes_util/NodeUtil.java

    r3096 r3107  
    155155    public static boolean isMultifix(List<Param> params) { 
    156156        for (Param p : params) { 
    157             if (p instanceof VarargsParam) return true; 
     157            if ( p.getVarargsType().isSome() ) 
     158                return true; 
    158159        } 
    159160        return (params.size() > 2); 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/Method.rats

    r3095 r3107  
    154154     a4:CoercionClauses w a5:(widens w)? equals w a6:NoNewlineExpr 
    155155     { if (a1 == null) a1 = FortressUtil.emptyStaticParams(); 
    156        List<Param> params = FortressUtil.<Param, NormalParam>mkList(NodeFactory.makeParam(a2, a3)); 
     156       List<Param> params = FortressUtil.<Param, Param>mkList(NodeFactory.makeParam(a2, a3)); 
    157157       List<Modifier> mods = new ArrayList<Modifier>(); 
    158158       if (a5 != null) mods.add(new ModifierWidens(createSpan(yyStart,8))); 
     
    169169     a4:CoercionClauses a5:(w widens)? 
    170170     { if (a1 == null) a1 = FortressUtil.emptyStaticParams(); 
    171        List<Param> params = FortressUtil.<Param, NormalParam>mkList(NodeFactory.makeParam(a2, a3)); 
     171       List<Param> params = FortressUtil.<Param, Param>mkList(NodeFactory.makeParam(a2, a3)); 
    172172       List<Modifier> mods = new ArrayList<Modifier>(); 
    173173       if (a5 != null) mods.add(new ModifierWidens(createSpan(yyStart,8))); 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/MethodParam.rats

    r2598 r3107  
    4848     }; 
    4949 
    50 NormalParam Param := 
     50Param Param := 
    5151     PlainParam 
    5252   / a1:self 
     
    5454                                              "self")); }; 
    5555 
    56 NormalParam AbsParam := 
     56Param AbsParam := 
    5757     a1:self 
    5858     { yyValue = NodeFactory.makeParam(new Id(createSpan(yyStart,yyCount), 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/Parameter.rats

    r2845 r3107  
    3535transient List<Param> ValParam = 
    3636     a1:BindId 
    37      { yyValue = FortressUtil.<Param, NormalParam>mkList(NodeFactory.makeParam(a1)); } 
     37     { yyValue = FortressUtil.<Param, Param>mkList(NodeFactory.makeParam(a1)); } 
    3838   / openparen a1:(w Params)? w closeparen 
    3939     { if (a1 == null) yyValue = FortressUtil.emptyParams(); 
     
    4848     } 
    4949   / a1:Type 
    50      { yyValue = FortressUtil.<Param, NormalParam>mkList(NodeFactory.makeAbsParam(a1)); }; 
     50     { yyValue = FortressUtil.<Param, Param>mkList(NodeFactory.makeAbsParam(a1)); }; 
    5151 
    5252/* Params ::= 
     
    7373   / a1s:(Param w comma w)* a2:(Varargs w comma w)? a3:Keyword 
    7474       a4s:(w comma w Keyword)* 
    75      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1s.list()); 
     75     { yyValue = FortressUtil.<Param, Param>mkList(a1s.list()); 
    7676       if (a2 != null) yyValue.add(a2); 
    7777       yyValue.add(a3); 
     
    7979     } 
    8080   / a1s:(Param w comma w)* a2:Varargs 
    81      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1s.list(), a2); } 
     81     { yyValue = FortressUtil.<Param, Param>mkList(a1s.list(), a2); } 
    8282   / a1:Param a2s:(w comma w Param)* 
    83      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1, a2s.list()); }; 
     83     { yyValue = FortressUtil.<Param, Param>mkList(a1, a2s.list()); }; 
    8484 
    8585/* AbsParams ::= 
     
    106106   / a1s:(AbsParam w comma w)* a2:(Varargs w comma w)? a3:Keyword 
    107107       a4s:(w comma w Keyword)* 
    108      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1s.list()); 
     108     { yyValue = FortressUtil.<Param, Param>mkList(a1s.list()); 
    109109       if (a2 != null) yyValue.add(a2); 
    110110       yyValue.add(a3); 
     
    112112     } 
    113113   / a1s:(AbsParam w comma w)* a2:Varargs 
    114      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1s.list(), a2); } 
     114     { yyValue = FortressUtil.<Param, Param>mkList(a1s.list(), a2); } 
    115115   / a1:AbsParam a2s:(w comma w AbsParam)* 
    116      { yyValue = FortressUtil.<Param, NormalParam>mkList(a1, a2s.list()); }; 
     116     { yyValue = FortressUtil.<Param, Param>mkList(a1, a2s.list()); }; 
    117117 
    118118/* Varargs ::= BindId w : w Type w ... */ 
    119 transient VarargsParam VarargsParam = a1:BindId w colon w a2:Type w ellipses 
     119transient Param VarargsParam = a1:BindId w colon w a2:Type w ellipses 
    120120     { yyValue = NodeFactory.makeVarargsParam(a1, a2); }; 
    121 transient VarargsParam Varargs = VarargsParam ; 
     121transient Param Varargs = VarargsParam ; 
    122122 
    123123/* Keyword ::= Param w = w Expr */ 
     
    126126 
    127127/* Param ::= BindId (w IsType)? */ 
    128 transient NormalParam PlainParam = 
     128transient Param PlainParam = 
    129129     a1:BindId a2:(w IsType)? 
    130130     { if (a2 != null) yyValue = NodeFactory.makeParam(a1, a2); 
    131131       else            yyValue = NodeFactory.makeParam(a1); 
    132132     }; 
    133 transient NormalParam Param = PlainParam ; 
     133transient Param Param = PlainParam ; 
    134134 
    135135/* AbsParam ::= BindId w IsType | Type */ 
    136 transient NormalParam AbsPlainParam = 
     136transient Param AbsPlainParam = 
    137137     a1:BindId w a2:IsType 
    138138     { yyValue = NodeFactory.makeParam(a1, a2); } 
    139139   / a1:Type 
    140140     { yyValue = NodeFactory.makeAbsParam(a1); }; 
    141 transient NormalParam AbsParam = AbsPlainParam ; 
     141transient Param AbsParam = AbsPlainParam ; 
    142142 
    143143/* OpHeaderFront ::= 
  • trunk/ProjectFortress/src/com/sun/fortress/parser/TraitObject.rats

    r3098 r3107  
    215215   ObjectParam   ::= ParamFldMods? Param 
    216216 */ 
    217 VarargsParam Varargs := 
     217Param Varargs := 
    218218     <ErrorProduction> 
    219219     VarargsParam 
     
    222222     }; 
    223223 
    224 NormalParam Param := 
     224Param Param := 
    225225     a1:ParamFldMods? a2:PlainParam 
    226226     { if (a1 != null) { 
     
    238238 
    239239/* ParamWType ::= BindId w IsType */ 
    240 private NormalParam PlainParamWType = 
     240private Param PlainParamWType = 
    241241    a1:BindId w a2:IsType 
    242242    { yyValue = NodeFactory.makeParam(a1, a2); }; 
  • trunk/ProjectFortress/src/com/sun/fortress/parser_util/SyntaxChecker.java

    r3102 r3107  
    275275                hasSelf = true; 
    276276            if ( (! hasBody) && 
    277                  p instanceof NormalParam && 
    278                  ((NormalParam)p).getType().isNone() && 
     277                 p.getVarargsType().isNone() && 
     278                 p.getType().isNone() && 
    279279                 ! p.getName().getText().equals("self") ) 
    280280                log(p, "The type of " + p.getName() + " is required."); 
  • trunk/ProjectFortress/src/com/sun/fortress/syntax_abstractions/phases/Transform.java

    r3105 r3107  
    126126 
    127127    /* Support renaming for these nodes 
    128      * LValue        ( only for LocalVarDecl ) - done 
    129      * FnDecl        ( only for local function decls ) - done 
    130      * NormalParam   ( only for FnExpr and local function decls ) - done 
    131      * VarargsParam  ( only for FnExpr and local function decls ) - done 
     128     * LValue  ( only for LocalVarDecl ) - done 
     129     * FnDecl  ( only for local function decls ) - done 
     130     * Param   ( only for FnExpr and local function decls ) - done 
    132131     * Label - done 
    133132     * Typecase - done 
     
    306305            final Transform transformer = Transform.this; 
    307306            return (Param) value.accept( new TemplateUpdateVisitor(){ 
    308                 public Node forNormalParamOnly(NormalParam that, List<Modifier> mods_result, Id name_result, Option<Type> type_result, Option<Expr> defaultExpr_result) { 
    309                     Debug.debug( Debug.Type.SYNTAX, 2, "Normal param id hash code " + name_result.generateHashCode() ); 
    310                     Id generatedId = renameId(name_result); 
    311                     /* 
    312                     Id old = (Id) name_result.accept(transformer); 
    313                     Id generatedId = generateId(old); 
    314                     Debug.debug( Debug.Type.SYNTAX, 2, "Generate new binding for " + old + " = " + generatedId ); 
    315                     extendSyntaxEnvironment(old, generatedId); 
    316                     */ 
    317                     return new NormalParam(that.getSpan(), mods_result, generatedId, type_result, defaultExpr_result); 
    318                 } 
    319                 public Node forVarargsParamOnly(VarargsParam that, List<Modifier> mods_result, Id name_result, Option<Type> type_result) { 
    320                     Debug.debug( Debug.Type.SYNTAX, 2, "Varargs param id hash code " + name_result.generateHashCode() ); 
    321                     Id old = (Id) name_result.accept(transformer); 
    322                     Id generatedId = generateId(old); 
    323                     Debug.debug( Debug.Type.SYNTAX, 2, "Generate new binding for " + old + " = " + generatedId ); 
    324                     extendSyntaxEnvironment(old, generatedId); 
    325                     return new VarargsParam(that.getSpan(), mods_result, generatedId, type_result); 
     307                public Node forParamOnly(Param that, List<Modifier> mods_result, 
     308                                         Id name_result, Option<Type> type_result, 
     309                                         Option<Expr> defaultExpr_result, 
     310                                         Option<Type> varargsType_result) { 
     311                    if ( varargsType_result.isNone() ) { 
     312                        Debug.debug( Debug.Type.SYNTAX, 2, "Normal param id hash code " + name_result.generateHashCode() ); 
     313                        Id generatedId = renameId(name_result); 
     314                        /* 
     315                          Id old = (Id) name_result.accept(transformer); 
     316                          Id generatedId = generateId(old); 
     317                          Debug.debug( Debug.Type.SYNTAX, 2, "Generate new binding for " + old + " = " + generatedId ); 
     318                          extendSyntaxEnvironment(old, generatedId); 
     319                        */ 
     320                        return new Param(that.getSpan(), mods_result, generatedId, type_result, defaultExpr_result); 
     321                    } else { 
     322                        Debug.debug( Debug.Type.SYNTAX, 2, "Varargs param id hash code " + name_result.generateHashCode() ); 
     323                        Id old = (Id) name_result.accept(transformer); 
     324                        Id generatedId = generateId(old); 
     325                        Debug.debug( Debug.Type.SYNTAX, 2, "Generate new binding for " + old + " = " + generatedId ); 
     326                        extendSyntaxEnvironment(old, generatedId); 
     327                        return new Param(that.getSpan(), mods_result, generatedId, Option.<Type>none(), Option.<Expr>none(), 
     328                                         varargsType_result); 
     329                    } 
    326330                } 
    327331            }); 
  • trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java

    r3105 r3107  
    682682    } 
    683683 
    684     @Override public String forNormalParamOnly(NormalParam that, 
    685                                                List<String> mods_result, 
    686                                                String name_result, 
    687                                                Option<String> type_result, 
    688                                                Option<String> defaultExpr_result) { 
     684    @Override public String forParamOnly(Param that, 
     685                                         List<String> mods_result, 
     686                                         String name_result, 
     687                                         Option<String> type_result, 
     688                                         Option<String> defaultExpr_result, 
     689                                         Option<String> varargsType_result) { 
    689690        StringBuilder s = new StringBuilder(); 
    690691 
     
    693694        } 
    694695        s.append( name_result ); 
    695         if (type_result.isSome() && 
    696             !name_result.equals("self")) 
    697             s.append( handleType(type_result.unwrap()) ); 
    698         if (defaultExpr_result.isSome()) 
    699             s.append( "=").append( defaultExpr_result ); 
    700  
    701         return s.toString(); 
    702     } 
    703  
    704     @Override public String forVarargsParamOnly(VarargsParam that, 
    705                                                 List<String> mods_result, 
    706                                                 String name_result, 
    707                                                 Option<String> type_result) { 
    708         StringBuilder s = new StringBuilder(); 
    709  
    710         for ( String mod : mods_result ){ 
    711             s.append( mod ).append( " " ); 
    712         } 
    713         s.append( name_result ); 
    714         s.append( handleType(type_result.unwrap()) ); 
    715         s.append( "..." ); 
     696 
     697        if ( varargsType_result.isNone() ) { 
     698            if (type_result.isSome() && 
     699                !name_result.equals("self")) 
     700                s.append( handleType(type_result.unwrap()) ); 
     701            if (defaultExpr_result.isSome()) 
     702                s.append( "=").append( defaultExpr_result ); 
     703        } else { 
     704            s.append( handleType(varargsType_result.unwrap()) ); 
     705            s.append( "..." ); 
     706        } 
    716707 
    717708        return s.toString();