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