annotate src/luan/Luan.java @ 1260:4b5b84853f6f

replace Table.as_table with Luan.to_table
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 23 Sep 2018 22:32:34 -0600
parents e8020216dee7
children 9fa8b8389578
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 package luan;
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
1259
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
3 import java.lang.reflect.Array;
318
4fe6c9fed486 add html processing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 296
diff changeset
4 import java.util.List;
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
5 import java.util.ArrayList;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
6 import java.util.Map;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
7 import java.util.LinkedHashMap;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
8 import java.util.Set;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
9 import java.util.Arrays;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
10 import java.util.Iterator;
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
11 import luan.modules.BasicLuan;
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1113
diff changeset
12 import luan.modules.Utils;
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
13 import luan.impl.LuanCompiler;
134
b585d0915621 remove CmdLine.java and move code to Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
14
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15
66
f7e17cfb35f9 minor toString() improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
16 public final class Luan {
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17
481
5d4a78c93383 luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 446
diff changeset
18 public static void main(String[] args) throws LuanException {
1242
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
19 doFile( "classpath:luan/cmd_line.luan", args );
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
20 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
21
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
22 public static void doFile(String uri,String... args) throws LuanException {
672
d3e5414bdf4c better java permission handling
Franklin Schmidt <fschmidt@gmail.com>
parents: 647
diff changeset
23 LuanState luan = new LuanState();
1242
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
24 LuanFunction fn = (LuanFunction)BasicLuan.load_file(luan,uri);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1166
diff changeset
25 fn.call(luan,args);
134
b585d0915621 remove CmdLine.java and move code to Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
26 }
b585d0915621 remove CmdLine.java and move code to Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
27
111
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
28 public static Object first(Object obj) {
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
29 if( !(obj instanceof Object[]) )
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
30 return obj;
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
31 Object[] a = (Object[])obj;
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
32 return a.length==0 ? null : a[0];
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
33 }
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
34
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
35 public static Object[] array(Object obj) {
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
36 return obj instanceof Object[] ? (Object[])obj : new Object[]{obj};
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
37 }
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
38
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
39 public static String type(Object obj) {
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
40 if( obj == null )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
41 return "nil";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
42 if( obj instanceof String )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
43 return "string";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
44 if( obj instanceof Boolean )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
45 return "boolean";
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
46 if( obj instanceof Number )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
47 return "number";
85
b2551f00bc51 fix type()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
48 if( obj instanceof LuanTable )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
49 return "table";
85
b2551f00bc51 fix type()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
50 if( obj instanceof LuanFunction )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
51 return "function";
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 111
diff changeset
52 if( obj instanceof byte[] )
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 111
diff changeset
53 return "binary";
513
0dfc01d8d42d rename type "userdata" to "java"
Franklin Schmidt <fschmidt@gmail.com>
parents: 481
diff changeset
54 return "java";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
55 }
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
56
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
57 public static String toString(Number n) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
58 if( n instanceof Integer )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
59 return n.toString();
255
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
60 int i = n.intValue();
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
61 if( i == n.doubleValue() )
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
62 return Integer.toString(i);
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
63 String s = n.toString();
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
64 int iE = s.indexOf('E');
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
65 String ending = null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
66 if( iE != -1 ) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
67 ending = s.substring(iE);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
68 s = s.substring(0,iE);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
69 }
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
70 if( s.endsWith(".0") )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
71 s = s.substring(0,s.length()-2);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
72 if( ending != null )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
73 s += ending;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
74 return s;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
75 }
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
76
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
77 public static Integer asInteger(Object obj) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
78 if( obj instanceof Integer )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
79 return (Integer)obj;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
80 if( !(obj instanceof Number) )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
81 return null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
82 Number n = (Number)obj;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
83 int i = n.intValue();
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
84 return i==n.doubleValue() ? Integer.valueOf(i) : null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
85 }
66
f7e17cfb35f9 minor toString() improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
86
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
87 public static String stringEncode(String s) {
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
88 s = s.replace("\\","\\\\");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
89 s = s.replace("\u0007","\\a");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
90 s = s.replace("\b","\\b");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
91 s = s.replace("\f","\\f");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
92 s = s.replace("\n","\\n");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
93 s = s.replace("\r","\\r");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
94 s = s.replace("\t","\\t");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
95 s = s.replace("\u000b","\\v");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
96 s = s.replace("\"","\\\"");
420
e9d4d5854e54 add String.encode
Franklin Schmidt <fschmidt@gmail.com>
parents: 419
diff changeset
97 s = s.replace("\'","\\'");
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
98 return s;
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
99 }
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
100
647
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
101
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
102 // from LuanState
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
103
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
104 public static Boolean checkBoolean(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
105 if( obj instanceof Boolean )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
106 return (Boolean)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
107 throw new LuanException("attempt to use a " + Luan.type(obj) + " value as a boolean" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
108 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
109
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
110 public static String checkString(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
111 if( obj instanceof String )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
112 return (String)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
113 throw new LuanException("attempt to use a " + Luan.type(obj) + " value as a string" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
114 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
115
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
116 public static LuanFunction checkFunction(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
117 if( obj instanceof LuanFunction )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
118 return (LuanFunction)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
119 throw new LuanException("attempt to call a " + Luan.type(obj) + " value" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
120 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
121
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
122 public static LuanFunction load(String text,String sourceName,LuanTable env)
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
123 throws LuanException
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
124 {
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
125 return LuanCompiler.compile(text,sourceName,env);
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
126 }
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
127
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
128 public static LuanFunction load(String text,String sourceName)
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
129 throws LuanException
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
130 {
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
131 return load(text,sourceName,null);
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
132 }
647
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
133
1259
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
134 /*
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
135 public static Object toLuan(Object obj) throws LuanException {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
136 if( !type(obj).equals("java") )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
137 return obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
138 LuanTable tbl = new LuanTable();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
139 if( obj instanceof Map ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
140 Map map = (Map)obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
141 for( Object stupid : map.entrySet() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
142 Map.Entry entry = (Map.Entry)stupid;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
143 Object key = entry.getKey();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
144 Object value = entry.getValue();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
145 if( key != null && value != null )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
146 tbl.rawPut(toLuan(key),toLuan(value));
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
147 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
148 return tbl;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
149 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
150 if( obj instanceof Set ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
151 Set set = (Set)obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
152 for( Object el : set ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
153 if( el != null )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
154 tbl.rawPut(toLuan(el),Boolean.TRUE);
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
155 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
156 return tbl;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
157 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
158 List list;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
159 if( obj instanceof List ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
160 list = (List)obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
161 } else {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
162 Class cls = obj.getClass();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
163 if( cls.isArray() && !cls.getComponentType().isPrimitive() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
164 Object[] a = (Object[])obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
165 list = Arrays.asList(a);
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
166 } else
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
167 throw new LuanException("can't convert type "+obj.getClass().getName()+" to luan");
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
168 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
169 int n = list.size();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
170 for( int i=0; i<n; i++ ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
171 Object val = list.get(i);
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
172 if( val != null )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
173 tbl.rawPut(i+1,toLuan(val));
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
174 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
175 return tbl;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
176 }
1259
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
177 */
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
178
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
179 public static Object toJava(Object obj) throws LuanException {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
180 if( !(obj instanceof LuanTable) )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
181 return obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
182 LuanTable tbl = (LuanTable)obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
183 if( tbl.isList() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
184 List list = new ArrayList();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
185 for( Object el : tbl.asList() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
186 list.add( toJava(el) );
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
187 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
188 return list;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
189 } else {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
190 Map map = new LinkedHashMap();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
191 Iterator<Map.Entry> iter = tbl.rawIterator();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
192 while( iter.hasNext() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
193 Map.Entry entry = iter.next();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
194 map.put( toJava(entry.getKey()), toJava(entry.getValue()) );
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
195 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
196 return map;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
197 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
198 }
1260
4b5b84853f6f replace Table.as_table with Luan.to_table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1259
diff changeset
199 /*
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1113
diff changeset
200 public static LuanTable table(LuanTable v) throws LuanException {
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1113
diff changeset
201 Utils.checkNotNull(v);
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1113
diff changeset
202 return v;
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1113
diff changeset
203 }
1260
4b5b84853f6f replace Table.as_table with Luan.to_table
Franklin Schmidt <fschmidt@gmail.com>
parents: 1259
diff changeset
204 */
1259
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
205 public static LuanTable toTable(Object obj) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
206 if( obj == null )
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
207 return null;
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
208 if( obj instanceof LuanTable )
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
209 return (LuanTable)obj;
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
210 if( obj instanceof List ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
211 return new LuanTable((List)obj);
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
212 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
213 if( obj instanceof Map ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
214 return new LuanTable((Map)obj);
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
215 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
216 if( obj instanceof Set ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
217 return new LuanTable((Set)obj);
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
218 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
219 Class cls = obj.getClass();
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
220 if( cls.isArray() ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
221 if( cls.getComponentType().isPrimitive() ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
222 int len = Array.getLength(obj);
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
223 List list = new ArrayList();
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
224 for( int i=0; i<len; i++ ) {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
225 list.add(Array.get(obj,i));
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
226 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
227 return new LuanTable(list);
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
228 } else {
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
229 Object[] a = (Object[])obj;
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
230 return new LuanTable(Arrays.asList(a));
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
231 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
232 }
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
233 return null;
e8020216dee7 add Luan.to_luan and fix multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents: 1242
diff changeset
234 }
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
235
66
f7e17cfb35f9 minor toString() improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
236 private Luan() {} // never
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
237 }