Mercurial Hosting > luan
annotate src/luan/modules/BasicLuan.java @ 1552:46d4baaad64d
add long_string_keys
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 04 Oct 2020 20:26:49 -0600 |
parents | 0dc3be25ad20 |
children | 26c51acf00f3 |
rev | line source |
---|---|
167
4c0131c2b650
merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
166
diff
changeset
|
1 package luan.modules; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
3 import java.io.InputStreamReader; |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
4 import java.io.IOException; |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
5 import java.lang.reflect.Method; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
6 import java.util.Iterator; |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
14
diff
changeset
|
7 import java.util.Map; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
112
diff
changeset
|
8 import java.util.List; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
112
diff
changeset
|
9 import java.util.ArrayList; |
1214
bae51e2d34c9
fix binary hash_code
Franklin Schmidt <fschmidt@gmail.com>
parents:
1189
diff
changeset
|
10 import java.util.Arrays; |
1552
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
11 import java.util.HashSet; |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
12 import goodjava.json.JsonToString; |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
13 import luan.Luan; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
14 import luan.LuanTable; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
15 import luan.LuanFunction; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
16 import luan.LuanException; |
1335 | 17 import luan.LuanCloner; |
1189 | 18 import luan.modules.parsers.LuanToString; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
21 public final class BasicLuan { |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
23 public static String type(Object obj) { |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
24 return Luan.type(obj); |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
25 } |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
26 |
1434
56fb5cd8228d
cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents:
1424
diff
changeset
|
27 public static LuanFunction load(Luan luan,String text,String sourceName,boolean persist,LuanTable env) |
128
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
28 throws LuanException |
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
29 { |
694
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
30 Utils.checkNotNull(text); |
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
31 Utils.checkNotNull(sourceName,1); |
1434
56fb5cd8228d
cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents:
1424
diff
changeset
|
32 return luan.load(text,sourceName,persist,env); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
33 } |
1424 | 34 /* |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1330
diff
changeset
|
35 public static LuanFunction load_file(Luan luan,String fileName) throws LuanException { |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
36 if( fileName == null ) { |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
37 fileName = "stdin:"; |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
38 } else if( fileName.indexOf(':') == -1 ) { |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
39 fileName = "file:" + fileName; |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
40 } |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
41 String src = PackageLuan.read(luan,fileName); |
299
a74559240b4f
simplify PackageLuan and remove IO loading param
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
297
diff
changeset
|
42 if( src == null ) |
1316
11d3640e739d
load_file returns nil for missing file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1302
diff
changeset
|
43 return null; |
1335 | 44 return load(luan,src,fileName,null); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
45 } |
1424 | 46 */ |
1267 | 47 public static LuanFunction pairs(final LuanTable t) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
48 Utils.checkNotNull(t); |
1267 | 49 return t.pairs(); |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
50 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
51 |
1335 | 52 private static class Ipairs extends LuanFunction { |
53 List<Object> list; | |
54 int i = 0; | |
55 final int size; | |
56 | |
57 Ipairs(LuanTable t) { | |
58 super(true); | |
59 list = t.asList(); | |
60 size = list.size(); | |
61 } | |
44
57054fa43189
implement table lib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
43
diff
changeset
|
62 |
1335 | 63 @Override public Object[] call(Object[] args) { |
64 if( i >= size ) | |
65 return LuanFunction.NOTHING; | |
66 Object val = list.get(i++); | |
67 return new Object[]{i,val}; | |
68 } | |
69 | |
70 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) { | |
71 Ipairs clone = (Ipairs)dc; | |
72 clone.list = (List)cloner.clone(list); | |
73 super.completeClone(dc,cloner); | |
74 } | |
75 } | |
76 | |
77 public static LuanFunction ipairs(LuanTable t) throws LuanException { | |
78 Utils.checkNotNull(t); | |
79 return new Ipairs(t); | |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
80 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
81 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
82 public static Object get_metatable(LuanTable table) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
83 Utils.checkNotNull(table); |
471
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
84 LuanTable metatable = table.getMetatable(); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
85 if( metatable == null ) |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
86 return null; |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
87 Object obj = metatable.rawGet("__metatable"); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
88 return obj!=null ? obj : metatable; |
35
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
89 } |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
90 |
1267 | 91 public static void set_metatable(LuanTable table,LuanTable metatable) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
92 Utils.checkNotNull(table); |
1267 | 93 if( table.getHandler("__metatable") != null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
94 throw new LuanException("cannot change a protected metatable"); |
35
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
95 table.setMetatable(metatable); |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
96 } |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
97 |
39
e5bcb1eeafc1
change naming convention
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
37
diff
changeset
|
98 public static boolean raw_equal(Object v1,Object v2) { |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
99 return v1 == v2 || v1 != null && v1.equals(v2); |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
100 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
101 |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
102 public static Object raw_get(LuanTable table,Object index) { |
426
23a93c118042
fix LuanTable.get() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
423
diff
changeset
|
103 return table.rawGet(index); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
104 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
105 |
1330 | 106 public static void raw_set(LuanTable table,Object index,Object value) throws LuanException { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
107 table.rawPut(index,value); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
108 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
109 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
110 public static int raw_len(Object v) throws LuanException { |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
111 if( v instanceof String ) { |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
112 String s = (String)v; |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
113 return s.length(); |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
114 } |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
115 if( v instanceof LuanTable ) { |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
116 LuanTable t = (LuanTable)v; |
432
d9df6d6cb927
finish fixing LuanTable to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
427
diff
changeset
|
117 return t.rawLength(); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
118 } |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
119 throw new LuanException( "bad argument #1 to 'raw_len' (table or string expected)" ); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
120 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
121 |
1334
c88b486a9511
make some Luan methods static
Franklin Schmidt <fschmidt@gmail.com>
parents:
1333
diff
changeset
|
122 public static String to_string(Object v) throws LuanException { |
c88b486a9511
make some Luan methods static
Franklin Schmidt <fschmidt@gmail.com>
parents:
1333
diff
changeset
|
123 return Luan.luanToString(v); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
124 } |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
125 |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1330
diff
changeset
|
126 public static LuanTable new_error(Luan luan,Object msg) throws LuanException { |
1334
c88b486a9511
make some Luan methods static
Franklin Schmidt <fschmidt@gmail.com>
parents:
1333
diff
changeset
|
127 String s = Luan.luanToString(msg); |
1267 | 128 LuanTable tbl = new LuanException(s).table(luan); |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
129 tbl.rawPut( "message", msg ); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
130 return tbl; |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
131 } |
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
132 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
133 public static int assert_integer(int v) { |
233
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
134 return v; |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
135 } |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
136 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
137 public static long assert_long(long v) { |
290
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
138 return v; |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
139 } |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
140 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
141 public static double assert_double(double v) { |
537
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
142 return v; |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
143 } |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
144 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
145 public static float assert_float(float v) { |
1130 | 146 return v; |
147 } | |
148 | |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
149 public static LuanFunction range(final double from,final double to,Double stepV) throws LuanException { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
150 final double step = stepV==null ? 1.0 : stepV; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
151 if( step == 0.0 ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
152 throw new LuanException("bad argument #3 (step may not be zero)"); |
1335 | 153 return new LuanFunction(false) { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
154 double v = from; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
155 |
1335 | 156 @Override public Object call(Object[] args) { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
157 if( step > 0.0 && v > to || step < 0.0 && v < to ) |
123
d7be9b3abf1a
minor - rename LuanFunction.EMPTY to NOTHING
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
118
diff
changeset
|
158 return LuanFunction.NOTHING; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
159 double rtn = v; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
160 v += step; |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
161 return rtn; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
162 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
163 }; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
164 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
165 |
1335 | 166 private static class Values extends LuanFunction { |
167 Object[] args; | |
168 int i = 0; | |
169 | |
170 Values(Object[] args) { | |
171 super(true); | |
172 this.args = args; | |
173 } | |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
174 |
1340
b3c4fcf29a53
fix values() and minor Http_test
Franklin Schmidt <fschmidt@gmail.com>
parents:
1335
diff
changeset
|
175 @Override public Object[] call(Object[] x) { |
1335 | 176 if( i >= args.length ) |
177 return LuanFunction.NOTHING; | |
178 Object val = args[i++]; | |
179 return new Object[]{i,val}; | |
180 } | |
181 | |
182 @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) { | |
183 Values clone = (Values)dc; | |
184 clone.args = (Object[])cloner.clone(args); | |
185 super.completeClone(dc,cloner); | |
186 } | |
187 } | |
188 | |
189 public static LuanFunction values(final Object... args) throws LuanException { | |
190 return new Values(args); | |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
191 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
192 |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
193 private LuanFunction fn(Object obj) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
194 return obj instanceof LuanFunction ? (LuanFunction)obj : null; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
195 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
196 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
197 public static String number_type(Number v) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
198 Utils.checkNotNull(v); |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
199 return v.getClass().getSimpleName().toLowerCase(); |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
200 } |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
201 |
1095
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
202 public static int hash_code(Object obj) throws LuanException { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
203 if( obj == null ) { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
204 return 0; |
1214
bae51e2d34c9
fix binary hash_code
Franklin Schmidt <fschmidt@gmail.com>
parents:
1189
diff
changeset
|
205 } else if( obj instanceof byte[] ) { |
bae51e2d34c9
fix binary hash_code
Franklin Schmidt <fschmidt@gmail.com>
parents:
1189
diff
changeset
|
206 return Arrays.hashCode((byte[])obj); |
1095
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
207 } else { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
208 return obj.hashCode(); |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
209 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
210 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
211 |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
212 public static String stringify(Object obj,LuanTable options) throws LuanException { |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
213 LuanToString lts = new LuanToString(); |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
214 if( options != null ) { |
1420 | 215 options = new LuanTable(options); |
216 Boolean strict = Utils.removeBoolean(options,"strict"); | |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
217 if( strict != null ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
218 lts.strict = strict; |
1420 | 219 Boolean numberTypes = Utils.removeBoolean(options,"number_types"); |
1389
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
220 if( numberTypes != null ) |
eb8b35dccd99
cleanup and stringify change
Franklin Schmidt <fschmidt@gmail.com>
parents:
1388
diff
changeset
|
221 lts.numberTypes = numberTypes; |
1420 | 222 Boolean compressed = Utils.removeBoolean(options,"compressed"); |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
223 if( compressed != null ) |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
224 lts.compressed = compressed; |
1550 | 225 Boolean useLongStrings = Utils.removeBoolean(options,"use_long_strings"); |
226 if( useLongStrings != null ) | |
227 lts.useLongStrings = useLongStrings; | |
1552
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
228 LuanTable longStringKeys = Utils.removeTable(options,"long_string_keys"); |
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
229 if( longStringKeys != null ) |
46d4baaad64d
add long_string_keys
Franklin Schmidt <fschmidt@gmail.com>
parents:
1550
diff
changeset
|
230 lts.longStringKeys = new HashSet(longStringKeys.asList()); |
1420 | 231 Utils.checkEmpty(options); |
1302
5345466fa61f
fix last commit and improve stringify
Franklin Schmidt <fschmidt@gmail.com>
parents:
1298
diff
changeset
|
232 } |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1340
diff
changeset
|
233 return lts.toString(obj); |
1189 | 234 } |
235 | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
236 public static String json_string(Object obj,LuanTable options) throws LuanException { |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
237 JsonToString jts = new JsonToString(); |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
238 if( options != null ) { |
1420 | 239 options = new LuanTable(options); |
240 Boolean compressed = Utils.removeBoolean(options,"compressed"); | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
241 if( compressed != null ) |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
242 jts.compressed = compressed; |
1420 | 243 Utils.checkEmpty(options); |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
244 } |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
245 return jts.toString(Luan.toJava(obj)); |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
246 } |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
247 |
1330 | 248 private void BasicLuan() {} // never |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
249 } |