Mercurial Hosting > luan
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 ); |