Mercurial Hosting > luan
annotate src/luan/lib/BasicLib.java @ 29:9bc66d09ea48
CmdLine improvements
git-svn-id: https://luan-java.googlecode.com/svn/trunk@30 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 07 Dec 2012 09:33:31 +0000 |
parents | 9de9be530625 |
children | 8d8f4f5caef4 |
rev | line source |
---|---|
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan.lib; |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
3 import java.io.File; |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
4 import java.io.Reader; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
5 import java.io.FileReader; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
6 import java.io.IOException; |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
7 import java.lang.reflect.Method; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
8 import java.util.Iterator; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
9 import java.util.Map; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
10 import org.parboiled.Parboiled; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
11 import org.parboiled.errors.ErrorUtils; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
12 import org.parboiled.parserunners.ReportingParseRunner; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
13 import org.parboiled.parserunners.TracingParseRunner; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
14 import org.parboiled.support.ParsingResult; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
15 import luan.Lua; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
16 import luan.LuaState; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
17 import luan.LuaTable; |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
18 import luan.LuaNumber; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
19 import luan.LuaFunction; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 import luan.LuaJavaFunction; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
21 import luan.LuaException; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
22 import luan.interp.LuaParser; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
23 import luan.interp.Expressions; |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
24 import luan.interp.Chunk; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
25 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
26 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
27 public class BasicLib { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
28 |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
29 public static void register(LuaState lua) { |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
30 LuaTable t = lua.env(); |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 add( t, "print", new Object[0].getClass() ); |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
32 add( t, "type", Object.class ); |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
33 add( t, "load", LuaState.class, String.class ); |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
34 add( t, "loadfile", LuaState.class, String.class ); |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
35 add( t, "pairs", LuaTable.class ); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
36 add( t, "ipairs", LuaTable.class ); |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
37 } |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 private static void add(LuaTable t,String method,Class<?>... parameterTypes) { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 try { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 t.set( method, new LuaJavaFunction(BasicLib.class.getMethod(method,parameterTypes),null) ); |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 } catch(NoSuchMethodException e) { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 throw new RuntimeException(e); |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
44 } |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 } |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
46 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
47 public static void print(Object... args) { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
48 for( int i=0; i<args.length; i++ ) { |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
49 if( i > 0 ) |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
50 System.out.print('\t'); |
10
8217d8485715
fix string conversion
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
4
diff
changeset
|
51 System.out.print( Lua.toString(args[i]) ); |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
52 } |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
53 System.out.println(); |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
54 } |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
56 public static String type(Object obj) { |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
57 return Lua.type(obj); |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
58 } |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
59 |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
60 public static LuaFunction load(LuaState lua,String ld) throws LuaException { |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
61 LuaParser parser = Parboiled.createParser(LuaParser.class); |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
62 ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(ld); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
13
diff
changeset
|
63 // ParsingResult<?> result = new TracingParseRunner(parser.Target()).run(ld); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
64 if( result.hasErrors() ) |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
65 throw new LuaException( ErrorUtils.printParseErrors(result) ); |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
66 Object resultValue = result.resultValue; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
67 if( resultValue instanceof Expressions ) { |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
68 final Expressions expressions = (Expressions)resultValue; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
69 return new LuaFunction() { |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
70 public Object[] call(LuaState lua,Object... args) throws LuaException { |
13
3b22ffbdb83a
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
71 return expressions.eval(lua); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
72 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
73 }; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
74 } |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
75 Chunk chunk = (Chunk)resultValue; |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
76 return chunk.newClosure(lua); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
77 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
78 |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
79 public static String readAll(Reader in) |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
80 throws IOException |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
81 { |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
82 char[] a = new char[8192]; |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
83 StringBuilder buf = new StringBuilder(); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
84 int n; |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
85 while( (n=in.read(a)) != -1 ) { |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
86 buf.append(a,0,n); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
87 } |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
88 return buf.toString(); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
89 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
90 |
29
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
91 public static String read(File file) |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
92 throws IOException |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
93 { |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
94 Reader in = new FileReader(file); |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
95 String s = readAll(in); |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
96 in.close(); |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
97 return s; |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
98 } |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
99 |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
100 |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
101 public static LuaFunction loadfile(LuaState lua,String fileName) throws LuaException,IOException { |
9bc66d09ea48
CmdLine improvements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
27
diff
changeset
|
102 return load(lua,read(new File(fileName))); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
103 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
104 |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
105 private static class TableIter { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
106 private final Iterator<Map.Entry<Object,Object>> iter; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
107 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
108 TableIter(LuaTable t) { |
27
9de9be530625
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
21
diff
changeset
|
109 this.iter = t.iterator(); |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
110 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
111 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
112 public Object[] next() { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
113 if( !iter.hasNext() ) |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
114 return LuaFunction.EMPTY_RTN; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
115 Map.Entry<Object,Object> entry = iter.next(); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
116 return new Object[]{entry.getKey(),entry.getValue()}; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
117 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
118 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
119 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
120 public static LuaFunction pairs(LuaTable t) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
121 try { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
122 TableIter ti = new TableIter(t); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
123 Method m = TableIter.class.getMethod("next"); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
124 m.setAccessible(true); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
125 return new LuaJavaFunction(m,ti); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
126 } catch(NoSuchMethodException e) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
127 throw new RuntimeException(e); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
128 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
129 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
130 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
131 private static class ArrayIter { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
132 private final LuaTable t; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
133 private double i = 0.0; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
134 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
135 ArrayIter(LuaTable t) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
136 this.t = t; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
137 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
138 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
139 public Object[] next() { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
140 LuaNumber n = new LuaNumber(++i); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
141 Object val = t.get(n); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
142 return val==null ? LuaFunction.EMPTY_RTN : new Object[]{n,val}; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
143 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
144 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
145 |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
146 public static LuaFunction ipairs(LuaTable t) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
147 try { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
148 ArrayIter ai = new ArrayIter(t); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
149 Method m = ArrayIter.class.getMethod("next"); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
150 m.setAccessible(true); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
151 return new LuaJavaFunction(m,ai); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
152 } catch(NoSuchMethodException e) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
153 throw new RuntimeException(e); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
154 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
155 } |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
156 } |