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