Mercurial Hosting > luan
changeset 2001:610c5d10d9c1 default tip
parsing fixes
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 14 Jul 2025 12:48:57 -0600 |
parents | 591d396bccad |
children | |
files | src/luan/impl/LuanParser.java |
diffstat | 1 files changed, 18 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/impl/LuanParser.java Mon Jul 14 00:47:19 2025 -0600 +++ b/src/luan/impl/LuanParser.java Mon Jul 14 12:48:57 2025 -0600 @@ -602,6 +602,7 @@ String name = Name(); if( name==null ) return parser.failure(null); + parser.upSb(); return parser.success(name); } @@ -755,7 +756,6 @@ Spaces(); Expr values = ExpStringList(); if( values==null ) -// throw parser.exception("Expressions expected"); return parser.failure(null); return parser.success( makeSetStmt(vars,values) ); } @@ -826,7 +826,8 @@ int start = parser.begin(); Var var = VarZ(); if( var==null || !var.isSettable() ) - return parser.failure(null); + return parser.failure(null); + parser.upSb(); return parser.success( var ); } @@ -1139,6 +1140,7 @@ Stmts block = RequiredBlock(); stmt.addAll( block ); RequiredMatch('`'); + Spaces(); stmt.add( "} finally { " ); stmt.add( "Io.put(luan,\"stdout\",stdout); " ); stmt.add( "} " ); @@ -1149,7 +1151,6 @@ exp.addAll( fnDef ); exp.add( ".call(luan)" ); frame = frame.parent; - Spaces(); return exp; } @@ -1173,7 +1174,8 @@ args.add( "args" ); stmt.addAll( makeLocalSetStmt(names,args) ); */ - n = names.size(); + n = names.size(); + stmt.addNewLines(); Expr t = new Expr(Val.SINGLE,false); for( int i=0; i<n; i++ ) { t.clear(); @@ -1288,11 +1290,12 @@ private Var VarZ() throws ParseException { parser.begin(); - Var var = VarStart(); + Var var = VarStart(); if( var==null ) - return parser.failure(null); + return parser.failure(null); + parser.upSb(); Var var2; - while( (var2=Var2(var.exp())) != null ) { + while( (var2=Var2(var)) != null ) { var = var2; } return parser.success(var); @@ -1320,16 +1323,19 @@ return null; } - private Var Var2(Expr exp1) throws ParseException { - parser.begin(); + private Var Var2(Var var) throws ParseException { + parser.begin(); + Expr exp1 = var.exp(); Expr exp2 = SubExpr(); if( exp2 != null ) return parser.success(indexVar(exp1,exp2)); if( parser.match('.') ) { Spaces(); - exp2 = NameExpr(); - if( exp2!=null ) - return parser.success(indexVar(exp1,exp2)); + exp2 = NameExpr(); + if( exp2!=null ) { + exp2.prependNewLines(); + return parser.success(indexVar(exp1,exp2)); + } return parser.failure(null); } Expr fnCall = Args( exp1, new ArrayList<Expr>() );