diff src/luan/CmdLine.java @ 12:9cea1aea5eef

CmdLine can run files git-svn-id: https://luan-java.googlecode.com/svn/trunk@13 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 23 Nov 2012 10:37:40 +0000
parents b7d7069fee58
children a7c13c6017f7
line wrap: on
line diff
--- a/src/luan/CmdLine.java	Thu Nov 22 10:51:56 2012 +0000
+++ b/src/luan/CmdLine.java	Fri Nov 23 10:37:40 2012 +0000
@@ -1,39 +1,54 @@
 package luan;
 
-import java.util.List;
 import java.util.Scanner;
-import org.parboiled.Parboiled;
-import org.parboiled.errors.ErrorUtils;
-import org.parboiled.parserunners.ReportingParseRunner;
-import org.parboiled.support.ParsingResult;
-import luan.interp.Expressions;
-import luan.interp.Stmt;
-import luan.interp.LuaParser;
 import luan.lib.BasicLib;
 
 
 public class CmdLine {
 
 	public static void main(String[] args) throws Exception {
-		LuaParser parser = Parboiled.createParser(LuaParser.class);
 		LuaState lua = new LuaState();
+		BasicLib.register(lua);
+		boolean interactive = false;
+		int i = 0;
+		while( i < args.length ) {
+			String arg = args[i];
+			if( !arg.startsWith("-") )
+				break;
+			if( arg.equals("-i") ) {
+				interactive = true;
+			} else {
+				throw new RuntimeException("invalid option: "+arg);
+			}
+			i++;
+		}
+		if( i == args.length ) {
+			interactive = true;
+		} else {
+			String file = args[i++];
+			try {
+				LuaFunction fn = BasicLib.loadFile(file);
+				fn.call(lua);
+			} catch(LuaException e) {
+				System.out.println(e.getMessage());
+				return;
+			}
+		}
+		if( interactive )
+			interactive(lua);
+	}
+
+	static void interactive(LuaState lua) {
 		while( true ) {
 			System.out.print("> ");
 			String input = new Scanner(System.in).nextLine();
-			ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(input);
-			if( result.hasErrors() ) {
-				System.out.println("Parse Errors:\n" + ErrorUtils.printParseErrors(result));
-			} else {
-				Object resultValue = result.resultValue;
-				if( resultValue instanceof Expressions ) {
-					Expressions expressions = (Expressions)resultValue;
-					List vals = expressions.eval(lua);
-					if( !vals.isEmpty() )
-						BasicLib.print( vals.toArray() );
-				} else {
-					Stmt stmt = (Stmt)resultValue;
-					stmt.eval(lua);
-				}
+			try {
+				LuaFunction fn = BasicLib.load(input);
+				Object[] rtn = fn.call(lua);
+				if( rtn.length > 0 )
+					BasicLib.print(rtn);
+			} catch(LuaException e) {
+				System.out.println(e.getMessage());
 			}
 		}
 	}