diff src/luan/impl/LuanParser.java @ 1561:e1a13e707bf3

start immutable
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 05 Nov 2020 20:24:09 -0700
parents 33a53c43e2f7
children b89212fd04b5
line wrap: on
line diff
--- a/src/luan/impl/LuanParser.java	Thu Oct 22 00:33:04 2020 -0600
+++ b/src/luan/impl/LuanParser.java	Thu Nov 05 20:24:09 2020 -0700
@@ -17,6 +17,7 @@
 
 	private interface Sym {
 		public Expr exp();
+		public Stmts set(Expr val);
 	}
 
 	private int symCounter = 0;
@@ -72,11 +73,33 @@
 					if( !isPointer )
 						return javaName;
 					else
-						return javaName + ".o";
+						return javaName + ".get()";
 				}
 			} );
 			return exp;
 		}
+
+		@Override public Stmts set(Expr val) {
+			Stmts stmt = new Stmts();
+			stmt.add( new Object() {
+				@Override public String toString() {
+					if( !isPointer )
+						return javaName + " = ";
+					else
+						return javaName + ".set(";
+				}
+			} );
+			stmt.addAll( val.single() );
+			stmt.add( new Object() {
+				@Override public String toString() {
+					if( !isPointer )
+						return ";  ";
+					else
+						return ");  ";
+				}
+			} );
+			return stmt;
+		}
 	}
 
 	private class UpSym implements Sym {
@@ -89,20 +112,28 @@
 			this.i = i;
 			this.value = value;
 		}
-/*
-		String init() {
-			return "upValues[" + i + "] = " + value + ";  ";
-		}
-*/
+
 		@Override public Expr exp() {
 			Expr exp = new Expr(Val.SINGLE,false);
 			exp.add( new Object() {
 				@Override public String toString() {
-					return "upValues[" + i + "].o";
+					return "upValues[" + i + "].get()";
 				}
 			} );
 			return exp;
 		}
+
+		@Override public Stmts set(Expr val) {
+			Stmts stmt = new Stmts();
+			stmt.add( new Object() {
+				@Override public String toString() {
+					return "upValues[" + i + "].set(";
+				}
+			} );
+			stmt.addAll( val.single() );
+			stmt.add( ");  " );
+			return stmt;
+		}
 	}
 
 	private final class Frame {
@@ -1312,15 +1343,9 @@
 
 			public Stmts set(Expr val) throws ParseException {
 				Sym sym = getSym(name);
-				if( sym != null ) {
-					Stmts stmt = new Stmts();
-					stmt.addAll( sym.exp() );
-					stmt.add( " = " );
-					stmt.addAll( val.single() );
-					stmt.add( ";  " );
-					return stmt;
-				}
-				Expr envExpr = env();
+				if( sym != null )
+					return sym.set(val);
+ 				Expr envExpr = env();
 				if( envExpr != null )
 					return indexVar( envExpr, constExpStr(name) ).set(val);
 				parser.failure(null);
@@ -2087,47 +2112,7 @@
 		}
 		return lines;
 	}
-/*
-	private Expr toFnExp(Stmts stmt,List<UpSym> upValueSymbols,String name) {
-		stmt.addNewLines();
-		if( !stmt.hasReturn )
-			stmt.add( "return LuanFunction.NOTHING;  " );
-		Expr exp = new Expr(Val.SINGLE,false);
-		exp.add( ""
-			+"new LuanClosure(luan(),"+upValueSymbols.size()+",javaOk,sourceName) {  "
-				+"{  "
-				+ init(upValueSymbols)
-				+"}  "
-				+"@Override public Object doCall(Luan luan,Object[] args) throws LuanException {  "
-		);
-		if( name != null ) {
-			exp.add( ""
-					+"return _" + name + "(luan,args);  "
-				+"}  "
-				+"private Object _" + name + "(Luan luan,Object[] args) throws LuanException {  "
-			);
-		}
-		exp.add( ""
-					+"final Pointer[] parentUpValues = upValues;  "
-					+"Object t;  "
-					+"Object[] a;  "
-		);
-		exp.addAll( stmt );
-		exp.add( ""
-				+"}  "
-			+"}  "
-		);
-		return exp;
-	}
 
-	private static String init(List<UpSym> upValueSymbols) {
-		StringBuilder sb = new StringBuilder();
-		for( UpSym upSym : upValueSymbols ) {
-			sb.append( upSym.init() );
-		}
-		return sb.toString();
-	}
-*/
 	private static String toUpValues(List<UpSym> upValueSymbols) {
 		StringBuilder sb = new StringBuilder();
 		sb.append( "new Pointer[]{ " );