comparison src/luan/impl/LuanParser.java @ 1089:894786a03d22

check for too many arguments
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 29 Dec 2016 21:26:45 -0700
parents d69d3c51c44e
children 20d5968e65cc
comparison
equal deleted inserted replaced
1088:bae2d0c2576c 1089:894786a03d22
1073 Spaces(); 1073 Spaces();
1074 frame = new Frame(frame); 1074 frame = new Frame(frame);
1075 Stmts stmt = new Stmts(); 1075 Stmts stmt = new Stmts();
1076 List<String> names = NameList(); 1076 List<String> names = NameList();
1077 if( names != null ) { 1077 if( names != null ) {
1078 /*
1078 Expr args = new Expr(Val.ARRAY,false); 1079 Expr args = new Expr(Val.ARRAY,false);
1079 args.add( "args" ); 1080 args.add( "args" );
1080 stmt.addAll( makeLocalSetStmt(names,args) ); 1081 stmt.addAll( makeLocalSetStmt(names,args) );
1082 */
1083 int n = names.size();
1084 Expr t = new Expr(Val.SINGLE,false);
1085 for( int i=0; i<n; i++ ) {
1086 t.clear();
1087 t.add( "LuanImpl.pick(args,"+i+")" );
1088 stmt.addAll( addSymbol(names.get(i),t) );
1089 }
1090
1081 if( parser.match(',') ) { 1091 if( parser.match(',') ) {
1082 Spaces(); 1092 Spaces();
1083 if( !parser.match("...") ) 1093 if( !parser.match("...") )
1084 throw parser.exception(); 1094 throw parser.exception();
1085 Spaces(); 1095 Spaces();
1086 frame.isVarArg = true; 1096 frame.isVarArg = true;
1087 stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args," + names.size() + "); " ); 1097 stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args," + names.size() + "); " );
1098 } else {
1099 stmt.add( "LuanImpl.noMore(args,"+n+"); " );
1088 } 1100 }
1089 } else if( parser.match("...") ) { 1101 } else if( parser.match("...") ) {
1090 Spaces(); 1102 Spaces();
1091 frame.isVarArg = true; 1103 frame.isVarArg = true;
1092 stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args,0); " ); 1104 stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args,0); " );
1105 } else {
1106 stmt.add( "LuanImpl.noMore(args,0); " );
1093 } 1107 }
1094 RequiredMatch(')'); 1108 RequiredMatch(')');
1095 Spaces(); 1109 Spaces();
1096 Stmts block = RequiredBlock(); 1110 Stmts block = RequiredBlock();
1097 stmt.addAll( block ); 1111 stmt.addAll( block );