Mercurial Hosting > luan
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 |