Mercurial Hosting > luan
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[]{ " );