Mercurial Hosting > luan
diff core/src/luan/impl/ThemeParser.java @ 645:859c0dedc8b6
remove LuanSource
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 29 Mar 2016 18:09:51 -0600 |
parents | c83b8cefd922 |
children | cdc70de628b5 |
line wrap: on
line diff
--- a/core/src/luan/impl/ThemeParser.java Tue Mar 29 13:53:01 2016 -0600 +++ b/core/src/luan/impl/ThemeParser.java Tue Mar 29 18:09:51 2016 -0600 @@ -5,9 +5,7 @@ import java.util.List; import java.util.ArrayList; import luan.Luan; -import luan.LuanSource; import luan.LuanTable; -import luan.LuanElement; import luan.LuanState; import luan.LuanFunction; import luan.LuanException; @@ -16,9 +14,9 @@ public final class ThemeParser { - public static LuanFunction compile(LuanState luan,LuanSource source) throws LuanException { + public static LuanFunction compile(LuanState luan,String sourceName,String sourceText) throws LuanException { try { - FnDef fnDef = new ThemeParser(source).parse(); + FnDef fnDef = new ThemeParser(sourceName,sourceText).parse(); final LuanStateImpl luanImpl = (LuanStateImpl)luan; return new Closure(luanImpl,fnDef); } catch(ParseException e) { @@ -89,21 +87,13 @@ private static final String INDENT = "-INDENT-"; private static final UpValue.Getter[] NO_UP_VALUE_GETTERS = new UpValue.Getter[0]; - private final LuanSource source; +// private final LuanSource source; private final Parser parser; private Frame frame = new Frame(); - private ThemeParser(LuanSource source) { - this.source = source; - this.parser = new Parser(this.source); - } - - private LuanElement se(int start) { - return se(start,null); - } - - private LuanElement se(int start,String text) { - return new LuanElement(source,start,parser.currentIndex(),text); + private ThemeParser(String sourceName,String sourceText) { +// this.source = source; + this.parser = new Parser(sourceName,sourceText); } private int symbolsSize() { @@ -116,8 +106,8 @@ frame.stackSize = symbolsSize(); } - private FnDef newFnDef(int start,Stmt stmt) { - return new FnDef( se(start), stmt, frame.stackSize, symbolsSize(), frame.isVarArg, frame.upValueGetters.toArray(NO_UP_VALUE_GETTERS) ); + private FnDef newFnDef(Stmt stmt) { + return new FnDef( stmt, frame.stackSize, symbolsSize(), frame.isVarArg, frame.upValueGetters.toArray(NO_UP_VALUE_GETTERS) ); } private int stackIndex(String name) { @@ -141,7 +131,7 @@ } private Expr env() { - return new GetLocalVar(null,stackIndex(ENV)); + return new GetLocalVar(stackIndex(ENV)); } private FnDef parse() throws ParseException { @@ -149,16 +139,14 @@ int stackStart = symbolsSize(); { addSymbol(IO); - LuanElement se = se(0,"require 'luan:Io'"); - FnCall requireCall = new FnCall( se, new ConstExpr(se,PackageLuan.requireFn), new ConstExpr(se,"luan:Io") ); + FnCall requireCall = new FnCall( new ConstExpr(PackageLuan.requireFn), new ConstExpr("luan:Io") ); SetStmt setStmt = new SetStmt( new SetLocalVar(stackIndex(IO)), new ExpressionsExpr(requireCall) ); stmts.add(setStmt); } { addSymbol(MOD); - LuanElement se = se(0,"local M = {['-INDENT-']=''}"); - TableExpr.Field indent = new TableExpr.Field(new ConstExpr(null,INDENT),new ConstExpr(null,"")); - TableExpr tableExpr = new TableExpr( se, new TableExpr.Field[]{indent}, ExpList.emptyExpList ); + TableExpr.Field indent = new TableExpr.Field(new ConstExpr(INDENT),new ConstExpr("")); + TableExpr tableExpr = new TableExpr( new TableExpr.Field[]{indent}, ExpList.emptyExpList ); SetStmt setStmt = new SetStmt( new SetLocalVar(stackIndex(MOD)), tableExpr ); stmts.add(setStmt); } @@ -170,14 +158,14 @@ parser.anyChar(); } } - stmts.add( new ReturnStmt(null,new GetLocalVar(null,stackIndex(MOD))) ); + stmts.add( new ReturnStmt(new GetLocalVar(stackIndex(MOD))) ); Stmt block = new Block( stmts.toArray(new Stmt[0]), stackStart, symbolsSize() ); - FnDef fnDef = newFnDef(0,block); + FnDef fnDef = newFnDef(block); return fnDef; } private Stmt parseDef() throws ParseException { - int start = parser.begin(); + parser.begin(); if( !parser.match("{define:") ) return parser.failure(null); String name = parseName(); @@ -192,12 +180,12 @@ InlineSpaces(); spaces = parser.textFrom(startSpaces); } - Expr table = new GetLocalVar(null,stackIndex(MOD)); - Settable fnName = new SetTableEntry(se(start),table,new ConstExpr(null,name)); + Expr table = new GetLocalVar(stackIndex(MOD)); + Settable fnName = new SetTableEntry(table,new ConstExpr(name)); frame = new Frame(frame); addSymbol(ENV); Stmt block = parseBody("define:"+name,spaces,indent); - FnDef fnDef = newFnDef(start,block); + FnDef fnDef = newFnDef(block); frame = frame.parent; Stmt rtn = new SetStmt(fnName,fnDef); return parser.success(rtn); @@ -210,7 +198,7 @@ { addSymbol(INDENT); final Expr env = env(); - Expr exp = new ExprImpl(se(start,"indent")) { + Expr exp = new ExprImpl() { @Override public Object eval(LuanStateImpl luan) throws LuanException { Object obj = env.eval(luan); if( !(obj instanceof LuanTable) ) @@ -291,22 +279,22 @@ List<Expressions> args = new ArrayList<Expressions>(); if( start < end ) { String text = parser.text.substring(start,end); - args.add( new ConstExpr(null,text) ); + args.add( new ConstExpr(text) ); } if( indent ) { - args.add( new GetLocalVar(null,stackIndex(INDENT)) ); + args.add( new GetLocalVar(stackIndex(INDENT)) ); } if( !args.isEmpty() ) { - Expr io = new GetUpVar(null,upValueIndex(IO)); - Expr stdoutExp = new IndexExpr( se(start,"stdout"), io, new ConstExpr(null,"stdout") ); - Expr writeExp = new IndexExpr( se(start,"write"), stdoutExp, new ConstExpr(null,"write") ); - FnCall writeCall = new FnCall( se(start), writeExp, ExpList.build(args) ); + Expr io = new GetUpVar(upValueIndex(IO)); + Expr stdoutExp = new IndexExpr( io, new ConstExpr("stdout") ); + Expr writeExp = new IndexExpr( stdoutExp, new ConstExpr("write") ); + FnCall writeCall = new FnCall( writeExp, ExpList.build(args) ); stmts.add( new ExpressionsStmt(writeCall) ); } } private Stmt parseBlock(String spaces,boolean afterIndent) throws ParseException { - int start = parser.begin(); + parser.begin(); String tagSpaces = null; if( afterIndent ) { tagSpaces = spaces; @@ -340,21 +328,21 @@ frame = new Frame(frame); addSymbol(ENV); Stmt block = parseBody("block:"+name,spaces,false); - FnDef fnDef = newFnDef(start,block); + FnDef fnDef = newFnDef(block); frame = frame.parent; // String rtn = "<% env." + tag.name + "(" + (tag.attrs.isEmpty() ? "nil" : table(tag.attrs)) + ",env,function(env) %>" + block + "<% end) %>"; Expr env = env(); - Expr fn = new IndexExpr( se(start,"block:"+name), env, new ConstExpr(null,name) ); + Expr fn = new IndexExpr( env, new ConstExpr(name) ); List<Expressions> args = new ArrayList<Expressions>(); args.add( env ); args.add( fnDef ); - FnCall fnCall = new FnCall( se(start), fn, ExpList.build(args) ); + FnCall fnCall = new FnCall( fn, ExpList.build(args) ); Stmt rtn = new ExpressionsStmt(fnCall); return parser.success(rtn); } private Stmt parseSimpleTag(String spaces) throws ParseException { - int start = parser.begin(); + parser.begin(); if( !parser.match('{') ) return parser.failure(null); String name = parseName(); @@ -364,12 +352,12 @@ return parser.failure(null); // rtn = "<% env." + name + (attrs.isEmpty() ? "()" : table(attrs)) + " %>"; Expr env = env(); - Expr fn = new IndexExpr( se(start,name), env, new ConstExpr(null,name) ); + Expr fn = new IndexExpr( env, new ConstExpr(name) ); if( spaces!=null && spaces.length() > 0 ) { final Expr oldEnv = env; - final Expr oldIndentExpr = new GetLocalVar(null,stackIndex(INDENT)); + final Expr oldIndentExpr = new GetLocalVar(stackIndex(INDENT)); final String addSpaces = spaces; - env = new ExprImpl(se(start,"indent_env")) { + env = new ExprImpl() { @Override public Object eval(LuanStateImpl luan) throws LuanException { LuanTable mt = new LuanTable(); mt.rawPut("__index",oldEnv.eval(luan)); @@ -382,7 +370,7 @@ } }; } - FnCall fnCall = new FnCall( se(start), fn, env ); + FnCall fnCall = new FnCall( fn, env ); Stmt rtn = new ExpressionsStmt(fnCall); return parser.success(rtn); }