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