changeset 656:471be4752b9e

compiling
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 05 Apr 2016 16:38:51 -0600
parents e2be71451d04
children 8081713bf7d9
files core/src/luan/impl/LuanParser.java
diffstat 1 files changed, 42 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/core/src/luan/impl/LuanParser.java	Tue Apr 05 15:28:07 2016 -0600
+++ b/core/src/luan/impl/LuanParser.java	Tue Apr 05 16:38:51 2016 -0600
@@ -323,7 +323,7 @@
 		parser.begin();
 		if( !Keyword("return",In.NOTHING) )
 			return parser.failure(null);
-		Expressions exprs = ExpList(In.NOTHING);
+		Expressions exprs = exp(ExpStringList(In.NOTHING));
 		if( exprs==null )
 			exprs = ExpList.emptyExpList;
 		return parser.success( new ReturnStmt(exprs) );
@@ -338,10 +338,10 @@
 		Var var = nameVar(RequiredName(In.NOTHING));
 		while( parser.match( '.' ) ) {
 			Spaces(In.NOTHING);
-			Expr exp = NameExpr(In.NOTHING);
+			ExpString exp = NameExpr(In.NOTHING);
 			if( exp==null )
 				return parser.failure(null);
-			var = indexVar( expr(var.expr()), exp );
+			var = indexVar( var.exp(), exp );
 		}
 		Settable fnName = var.settable();
 
@@ -815,7 +815,7 @@
 		exp = FunctionExpr(in);
 		if( exp != null )
 			return parser.success(exp);
-		exp = VarExp(in);
+		exp = exp(VarExp(in));
 		if( exp != null )
 			return parser.success(exp);
 		exp = VarArgs(in);
@@ -894,13 +894,13 @@
 
 	private boolean Field(List<ExpString> builder) throws ParseException {
 		parser.begin();
-		Expr exp = SubExpr(In.NOTHING);
+		ExpString exp = SubExpr(In.NOTHING);
 		if( exp==null )
 			exp = NameExpr(In.NOTHING);
 		if( exp!=null && parser.match('=') ) {
 			Spaces(In.NOTHING);
 			ExpString val = RequiredExpr(In.NOTHING).expr();
-			String code = "new TableField(" + new ExpString(exp).code + "," + val.code + ")";
+			String code = "new TableField(" + exp.code + "," + val.code + ")";
 			builder.add( new ExpString(code,true,false) );
 			return parser.success();
 		}
@@ -913,9 +913,9 @@
 		return parser.failure();
 	}
 
-	private Expressions VarExp(In in) throws ParseException {
+	private ExpString VarExp(In in) throws ParseException {
 		Var var = VarZ(in);
-		return var==null ? null : var.expr();
+		return var==null ? null : var.exp();
 	}
 
 	private Var VarZ(In in) throws ParseException {
@@ -924,7 +924,7 @@
 		if( var==null )
 			return parser.failure(null);
 		Var var2;
-		while( (var2=Var2(in,var.expr())) != null ) {
+		while( (var2=Var2(in,var.exp())) != null ) {
 			var = var2;
 		}
 		return parser.success(var);
@@ -934,7 +934,7 @@
 		if( parser.match('(') ) {
 			In inParens = in.parens();
 			Spaces(inParens);
-			Expr exp = expr(exp(RequiredExpr(inParens)));
+			ExpString exp = RequiredExpr(inParens).expr();
 			RequiredMatch(')');
 			Spaces(in);
 			return exprVar(exp);
@@ -942,8 +942,8 @@
 		String name = Name(in);
 		if( name != null )
 			return nameVar(name);
-		Expressions exp;
-		exp = exp(TableExpr(in));
+		ExpString exp;
+		exp = TableExpr(in);
 		if( exp != null )
 			return exprVar(exp);
 		exp = Literal(in);
@@ -952,26 +952,26 @@
 		return null;
 	}
 
-	private Var Var2(In in,Expressions exp1) throws ParseException {
+	private Var Var2(In in,ExpString exp1) throws ParseException {
 		parser.begin();
-		Expr exp2 = SubExpr(in);
+		ExpString exp2 = SubExpr(in);
 		if( exp2 != null )
-			return parser.success(indexVar(expr(exp1),exp2));
+			return parser.success(indexVar(exp1,exp2));
 		if( parser.match('.') ) {
 			Spaces(in);
 			exp2 = NameExpr(in);
 			if( exp2!=null )
-				return parser.success(indexVar(expr(exp1),exp2));
+				return parser.success(indexVar(exp1,exp2));
 			return parser.failure(null);
 		}
-		FnCall fnCall = Args( in, expr(exp1), new ArrayList<ExpString>() );
+		ExpString fnCall = Args( in, exp1, new ArrayList<ExpString>() );
 		if( fnCall != null )
 			return parser.success(exprVar(fnCall));
 		return parser.failure(null);
 	}
 
 	private interface Var {
-		public Expressions expr() throws ParseException;
+		public ExpString exp() throws ParseException;
 		public Settable settable() throws ParseException;
 	}
 
@@ -988,16 +988,16 @@
 	private Var nameVar(final String name) {
 		return new Var() {
 
-			public Expr expr() throws ParseException {
+			public ExpString exp() throws ParseException {
 				int index = stackIndex(name);
 				if( index != -1 )
-					return new GetLocalVar(index);
+					return new ExpString(new GetLocalVar(index));
 				index = upValueIndex(name);
 				if( index != -1 )
-					return new GetUpVar(index);
+					return new ExpString(new GetUpVar(index));
 				Expr envExpr = env();
 				if( envExpr != null )
-					return new IndexExpr( envExpr, new ConstExpr(name) );
+					return indexExpStr( new ExpString(envExpr), constExpStr(name) );
 				parser.failure(null);
 				throw parser.exception("name '"+name+"' not defined");
 			}
@@ -1018,10 +1018,10 @@
 		};
 	}
 
-	private Var exprVar(final Expressions expr) {
+	private Var exprVar(final ExpString expr) {
 		return new Var() {
 
-			public Expressions expr() {
+			public ExpString exp() {
 				return expr;
 			}
 
@@ -1031,24 +1031,24 @@
 		};
 	}
 
-	private Var indexVar(final Expr table,final Expr key) {
+	private Var indexVar(final ExpString table,final ExpString key) {
 		return new Var() {
 
-			public Expr expr() {
-				return new IndexExpr( table, key );
+			public ExpString exp() {
+				return indexExpStr( table, key );
 			}
 
 			public Settable settable() {
-				return new SetTableEntry(table,key);
+				return new SetTableEntry(expr(LuanParser.exp(table)),expr(LuanParser.exp(key)));
 			}
 		};
 	}
 
-	private FnCall Args(In in,Expr fn,List<ExpString> builder) throws ParseException {
+	private ExpString Args(In in,ExpString fn,List<ExpString> builder) throws ParseException {
 		parser.begin();
 		return args(in,builder)
-			? parser.success( new FnCall( fn, ExpList.build(expList(builder)) ) )
-			: parser.failure((FnCall)null);
+			? parser.success( callExpStr( fn, expString(builder) ) )
+			: parser.failure((ExpString)null);
 	}
 
 	private boolean args(In in,List<ExpString> builder) throws ParseException {
@@ -1082,11 +1082,6 @@
 		return parser.failure();
 	}
 
-	private Expressions ExpList(In in) throws ParseException {
-		List<ExpString> builder = new ArrayList<ExpString>();
-		return ExpList(in,builder) ? ExpList.build(expList(builder)) : null;
-	}
-
 	private ExpString ExpStringList(In in) throws ParseException {
 		List<ExpString> builder = new ArrayList<ExpString>();
 		return ExpList(in,builder) ? expString(builder) : null;
@@ -1115,23 +1110,23 @@
 		return parser.success();
 	}
 
-	private Expr SubExpr(In in) throws ParseException {
+	private ExpString SubExpr(In in) throws ParseException {
 		parser.begin();
 		if( !parser.match('[') || parser.test("[") || parser.test("=") )
 			return parser.failure(null);
 		Spaces(In.NOTHING);
-		Expr exp = expr(exp(RequiredExpr(In.NOTHING)));
+		ExpString exp = RequiredExpr(In.NOTHING).expr();
 		RequiredMatch(']');
 		Spaces(in);
 		return parser.success(exp);
 	}
 
-	private Expr NameExpr(In in) throws ParseException {
+	private ExpString NameExpr(In in) throws ParseException {
 		parser.begin();
 		String name = Name(in);
 		if( name==null )
 			return parser.failure(null);
-		return parser.success(new ConstExpr(name));
+		return parser.success(constExpStr(name));
 	}
 
 	private String RequiredName(In in) throws ParseException {
@@ -1210,19 +1205,19 @@
 		"while"
 	));
 
-	private Expr Literal(In in) throws ParseException {
+	private ExpString Literal(In in) throws ParseException {
 		parser.begin();
 		if( NilLiteral(in) )
-			return parser.success(new ConstExpr(null));
+			return parser.success(constExpStr(null));
 		Boolean b = BooleanLiteral(in);
 		if( b != null )
-			return parser.success(new ConstExpr(b));
+			return parser.success(constExpStr(b));
 		Number n = NumberLiteral(in);
 		if( n != null )
-			return parser.success(new ConstExpr(n));
+			return parser.success(constExpStr(n));
 		String s = StringLiteral(in);
 		if( s != null )
-			return parser.success(new ConstExpr(s));
+			return parser.success(constExpStr(s));
 		return parser.failure(null);
 	}
 
@@ -1556,7 +1551,7 @@
 			}
 		}
 	}
-
+/*
 	private static List<Expressions> expList(List<ExpString> esList) {
 		List<Expressions> list = new ArrayList<Expressions>();
 		for( ExpString es : esList ) {
@@ -1564,7 +1559,7 @@
 		}
 		return list;
 	}
-
+*/
 	private static class StmtString {
 		final String code;