Mercurial Hosting > luan
diff src/luan/lib/BasicLib.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 | 8217d8485715 |
children | 3b22ffbdb83a |
line wrap: on
line diff
--- a/src/luan/lib/BasicLib.java Thu Nov 22 10:51:56 2012 +0000 +++ b/src/luan/lib/BasicLib.java Fri Nov 23 10:37:40 2012 +0000 @@ -1,13 +1,27 @@ package luan.lib; +import java.io.FileReader; +import java.io.IOException; +import org.parboiled.Parboiled; +import org.parboiled.errors.ErrorUtils; +import org.parboiled.parserunners.ReportingParseRunner; +import org.parboiled.parserunners.TracingParseRunner; +import org.parboiled.support.ParsingResult; import luan.Lua; +import luan.LuaState; import luan.LuaTable; +import luan.LuaFunction; import luan.LuaJavaFunction; +import luan.LuaException; +import luan.interp.LuaParser; +import luan.interp.Expressions; +import luan.interp.Stmt; public class BasicLib { - public static void register(LuaTable t) { + public static void register(LuaState lua) { + LuaTable t = lua.env(); add( t, "print", new Object[0].getClass() ); add( t, "type", Object.class ); } @@ -33,4 +47,42 @@ return Lua.type(obj); } + public static LuaFunction load(String ld) throws LuaException { + LuaParser parser = Parboiled.createParser(LuaParser.class); + ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(ld); + if( result.hasErrors() ) + throw new LuaException( ErrorUtils.printParseErrors(result) ); + Object resultValue = result.resultValue; + if( resultValue instanceof Expressions ) { + final Expressions expressions = (Expressions)resultValue; + return new LuaFunction() { + public Object[] call(LuaState lua,Object... args) throws LuaException { + return expressions.eval(lua).toArray(); + } + }; + } + final Stmt stmt = (Stmt)resultValue; + return new LuaFunction() { + public Object[] call(LuaState lua,Object... args) throws LuaException { + stmt.eval(lua); + return LuaFunction.EMPTY_RTN; + } + }; + } + + public static String readFile(String fileName) throws IOException { + StringBuilder sb = new StringBuilder(); + FileReader in = new FileReader(fileName); + char[] buf = new char[8192]; + int n; + while( (n=in.read(buf)) != -1 ) { + sb.append(buf,0,n); + } + return sb.toString(); + } + + public static LuaFunction loadFile(String fileName) throws LuaException,IOException { + return load(readFile(fileName)); + } + }