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();