Mercurial Hosting > luan
diff 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 |
line wrap: on
line diff
--- a/src/luan/impl/LuanParser.java Mon Dec 26 22:29:36 2016 -0700 +++ b/src/luan/impl/LuanParser.java Thu Dec 29 21:26:45 2016 -0700 @@ -1075,9 +1075,19 @@ Stmts stmt = new Stmts(); List<String> names = NameList(); if( names != null ) { +/* Expr args = new Expr(Val.ARRAY,false); args.add( "args" ); stmt.addAll( makeLocalSetStmt(names,args) ); +*/ + int n = names.size(); + Expr t = new Expr(Val.SINGLE,false); + for( int i=0; i<n; i++ ) { + t.clear(); + t.add( "LuanImpl.pick(args,"+i+")" ); + stmt.addAll( addSymbol(names.get(i),t) ); + } + if( parser.match(',') ) { Spaces(); if( !parser.match("...") ) @@ -1085,11 +1095,15 @@ Spaces(); frame.isVarArg = true; stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args," + names.size() + "); " ); + } else { + stmt.add( "LuanImpl.noMore(args,"+n+"); " ); } } else if( parser.match("...") ) { Spaces(); frame.isVarArg = true; stmt.add( "final Object[] varArgs = LuanImpl.varArgs(args,0); " ); + } else { + stmt.add( "LuanImpl.noMore(args,0); " ); } RequiredMatch(')'); Spaces();