Mercurial Hosting > luan
diff core/src/luan/impl/LuanParser.java @ 658:e038905512d3
compile ReturnStmt
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 05 Apr 2016 18:38:29 -0600 |
parents | 8081713bf7d9 |
children | e064377994b2 |
line wrap: on
line diff
--- a/core/src/luan/impl/LuanParser.java Tue Apr 05 17:37:54 2016 -0600 +++ b/core/src/luan/impl/LuanParser.java Tue Apr 05 18:38:29 2016 -0600 @@ -181,9 +181,10 @@ FnDef Expression() throws ParseException { Spaces(In.NOTHING); int start = parser.begin(); - Expressions expr = exp(ExprZ(In.NOTHING)); + ExpString expr = ExprZ(In.NOTHING); if( expr != null && parser.endOfInput() ) { - Stmt stmt = new ReturnStmt( expr ); + String code = "luan.returnValues = " + expr.code + ";\n"; + Stmt stmt = stmt( new StmtString(code) ); return parser.success(newFnDef(start,stmt)); } return parser.failure(null); @@ -246,7 +247,7 @@ if( LocalStmt(stmts) ) return; StmtString stmt; - if( (stmt=stmtStr(ReturnStmt())) != null + if( (stmt=ReturnStmt()) != null || (stmt=stmtStr(FunctionStmt())) != null || (stmt=stmtStr(LocalFunctionStmt())) != null || (stmt=BreakStmt()) != null @@ -327,14 +328,14 @@ } } - private Stmt ReturnStmt() throws ParseException { + private StmtString ReturnStmt() throws ParseException { parser.begin(); if( !Keyword("return",In.NOTHING) ) return parser.failure(null); - Expressions exprs = exp(ExpStringList(In.NOTHING)); - if( exprs==null ) - exprs = ExpList.emptyExpList; - return parser.success( new ReturnStmt(exprs) ); + ExpString exprs = ExpStringList(In.NOTHING); + String code = "luan.returnValues = " + (exprs!=null ? exprs.code : "LuanFunction.NOTHING") + ";\n" + +"return;\n"; + return parser.success( new StmtString(code) ); } private Stmt FunctionStmt() throws ParseException {