comparison src/luan/interp/LuanParser.java @ 158:cced1c4d3575

only allow TemplateExpressions at end of expr list; change LuanParser.Expressions() to Expression(); git-svn-id: https://luan-java.googlecode.com/svn/trunk@159 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 18 Jun 2014 21:49:06 +0000
parents 1de3e4a6e82d
children 0abc9181061a
comparison
equal deleted inserted replaced
157:1de3e4a6e82d 158:cced1c4d3575
178 178
179 private FnDef newFnDef(int start,Stmt stmt) { 179 private FnDef newFnDef(int start,Stmt stmt) {
180 return new FnDef( se(start), stmt, frame.stackSize, symbolsSize(), frame.isVarArg, frame.upValueGetters.toArray(NO_UP_VALUE_GETTERS) ); 180 return new FnDef( se(start), stmt, frame.stackSize, symbolsSize(), frame.isVarArg, frame.upValueGetters.toArray(NO_UP_VALUE_GETTERS) );
181 } 181 }
182 182
183 FnDef Expressions() throws ParseException { 183 FnDef Expression() throws ParseException {
184 Spaces(In.NOTHING); 184 Spaces(In.NOTHING);
185 int start = parser.begin(); 185 int start = parser.begin();
186 Expressions exprs = ExpList(In.NOTHING); 186 Expressions expr = Expr(In.NOTHING);
187 if( exprs != null && parser.endOfInput() ) { 187 if( expr != null && parser.endOfInput() ) {
188 Stmt stmt = new ReturnStmt( se(start), exprs ); 188 Stmt stmt = new ReturnStmt( se(start), expr );
189 return parser.success(newFnDef(start,stmt)); 189 return parser.success(newFnDef(start,stmt));
190 } 190 }
191 return parser.failure(null); 191 return parser.failure(null);
192 } 192 }
193 193
567 567
568 private Expressions Expr(In in) throws ParseException { 568 private Expressions Expr(In in) throws ParseException {
569 parser.begin(); 569 parser.begin();
570 Expressions exp; 570 Expressions exp;
571 return (exp = VarArgs(in)) != null 571 return (exp = VarArgs(in)) != null
572 || (exp = TemplateExpressions(in)) != null
573 || (exp = OrExpr(in)) != null 572 || (exp = OrExpr(in)) != null
574 ? parser.success(exp) 573 ? parser.success(exp)
575 : parser.failure((Expressions)null) 574 : parser.failure((Expressions)null)
576 ; 575 ;
577 } 576 }
885 private Var VarStart(In in) throws ParseException { 884 private Var VarStart(In in) throws ParseException {
886 int start = parser.begin(); 885 int start = parser.begin();
887 if( parser.match('(') ) { 886 if( parser.match('(') ) {
888 In inParens = in.parens(); 887 In inParens = in.parens();
889 Spaces(inParens); 888 Spaces(inParens);
890 Expr exp = expr(Expr(inParens)); 889 Expr exp = expr(RequiredExpr(inParens));
891 RequiredMatch(')'); 890 RequiredMatch(')');
892 Spaces(in); 891 Spaces(in);
893 return parser.success(exprVar(exp)); 892 return parser.success(exprVar(exp));
894 } 893 }
895 String name = Name(in); 894 String name = Name(in);
1008 return ExpList(in,builder) ? ExpList.build(builder) : null; 1007 return ExpList(in,builder) ? ExpList.build(builder) : null;
1009 } 1008 }
1010 1009
1011 private boolean ExpList(In in,List<Expressions> builder) throws ParseException { 1010 private boolean ExpList(In in,List<Expressions> builder) throws ParseException {
1012 parser.begin(); 1011 parser.begin();
1013 Expressions exp = Expr(in); 1012 Expressions exp = TemplateExpressions(in);
1013 if( exp != null ) {
1014 builder.add(exp);
1015 return parser.success();
1016 }
1017 exp = Expr(in);
1014 if( exp==null ) 1018 if( exp==null )
1015 return parser.failure(); 1019 return parser.failure();
1016 builder.add(exp); 1020 builder.add(exp);
1017 while( parser.match(',') ) { 1021 while( parser.match(',') ) {
1018 Spaces(in); 1022 Spaces(in);
1023 exp = TemplateExpressions(in);
1024 if( exp != null ) {
1025 builder.add(exp);
1026 return parser.success();
1027 }
1019 builder.add( RequiredExpr(in) ); 1028 builder.add( RequiredExpr(in) );
1020 } 1029 }
1021 return parser.success(); 1030 return parser.success();
1022 } 1031 }
1023 1032