comparison src/luan/lib/BasicLib.java @ 21:c93d8c781853

add functions git-svn-id: https://luan-java.googlecode.com/svn/trunk@22 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 04 Dec 2012 09:16:03 +0000
parents a7c13c6017f7
children 9de9be530625
comparison
equal deleted inserted replaced
20:d85510d92eee 21:c93d8c781853
17 import luan.LuaFunction; 17 import luan.LuaFunction;
18 import luan.LuaJavaFunction; 18 import luan.LuaJavaFunction;
19 import luan.LuaException; 19 import luan.LuaException;
20 import luan.interp.LuaParser; 20 import luan.interp.LuaParser;
21 import luan.interp.Expressions; 21 import luan.interp.Expressions;
22 import luan.interp.Stmt; 22 import luan.interp.Chunk;
23 23
24 24
25 public class BasicLib { 25 public class BasicLib {
26 26
27 public static void register(LuaState lua) { 27 public static void register(LuaState lua) {
28 LuaTable t = lua.env(); 28 LuaTable t = lua.env();
29 add( t, "print", new Object[0].getClass() ); 29 add( t, "print", new Object[0].getClass() );
30 add( t, "type", Object.class ); 30 add( t, "type", Object.class );
31 add( t, "load", String.class ); 31 add( t, "load", LuaState.class, String.class );
32 add( t, "loadFile", String.class ); 32 add( t, "loadFile", LuaState.class, String.class );
33 add( t, "pairs", LuaTable.class ); 33 add( t, "pairs", LuaTable.class );
34 add( t, "ipairs", LuaTable.class ); 34 add( t, "ipairs", LuaTable.class );
35 } 35 }
36 36
37 private static void add(LuaTable t,String method,Class<?>... parameterTypes) { 37 private static void add(LuaTable t,String method,Class<?>... parameterTypes) {
53 53
54 public static String type(Object obj) { 54 public static String type(Object obj) {
55 return Lua.type(obj); 55 return Lua.type(obj);
56 } 56 }
57 57
58 public static LuaFunction load(String ld) throws LuaException { 58 public static LuaFunction load(LuaState lua,String ld) throws LuaException {
59 LuaParser parser = Parboiled.createParser(LuaParser.class); 59 LuaParser parser = Parboiled.createParser(LuaParser.class);
60 ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(ld); 60 ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(ld);
61 // ParsingResult<?> result = new TracingParseRunner(parser.Target()).run(ld); 61 // ParsingResult<?> result = new TracingParseRunner(parser.Target()).run(ld);
62 if( result.hasErrors() ) 62 if( result.hasErrors() )
63 throw new LuaException( ErrorUtils.printParseErrors(result) ); 63 throw new LuaException( ErrorUtils.printParseErrors(result) );
68 public Object[] call(LuaState lua,Object... args) throws LuaException { 68 public Object[] call(LuaState lua,Object... args) throws LuaException {
69 return expressions.eval(lua); 69 return expressions.eval(lua);
70 } 70 }
71 }; 71 };
72 } 72 }
73 final Stmt stmt = (Stmt)resultValue; 73 Chunk chunk = (Chunk)resultValue;
74 return new LuaFunction() { 74 return chunk.newClosure(lua);
75 public Object[] call(LuaState lua,Object... args) throws LuaException {
76 stmt.eval(lua);
77 return LuaFunction.EMPTY_RTN;
78 }
79 };
80 } 75 }
81 76
82 public static String readFile(String fileName) throws IOException { 77 public static String readFile(String fileName) throws IOException {
83 StringBuilder sb = new StringBuilder(); 78 StringBuilder sb = new StringBuilder();
84 FileReader in = new FileReader(fileName); 79 FileReader in = new FileReader(fileName);
88 sb.append(buf,0,n); 83 sb.append(buf,0,n);
89 } 84 }
90 return sb.toString(); 85 return sb.toString();
91 } 86 }
92 87
93 public static LuaFunction loadFile(String fileName) throws LuaException,IOException { 88 public static LuaFunction loadFile(LuaState lua,String fileName) throws LuaException,IOException {
94 return load(readFile(fileName)); 89 return load(lua,readFile(fileName));
95 } 90 }
96 91
97 private static class TableIter { 92 private static class TableIter {
98 private final Iterator<Map.Entry<Object,Object>> iter; 93 private final Iterator<Map.Entry<Object,Object>> iter;
99 94