Mercurial Hosting > luan
annotate src/luan/modules/BasicLuan.java @ 1563:8fbcc4747091
remove LuanFunction.luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 09 Nov 2020 01:37:57 -0700 |
parents | b89212fd04b5 |
children | c922446f53aa |
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; |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
18 import luan.LuanCloneable; |
1561 | 19 import luan.LuanImmutabler; |
1189 | 20 import luan.modules.parsers.LuanToString; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
21 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
23 public final class BasicLuan { |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
24 |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
25 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
|
26 return Luan.type(obj); |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
27 } |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
28 |
1434
56fb5cd8228d
cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents:
1424
diff
changeset
|
29 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
|
30 throws LuanException |
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
31 { |
694
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
32 Utils.checkNotNull(text); |
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
33 Utils.checkNotNull(sourceName,1); |
1434
56fb5cd8228d
cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents:
1424
diff
changeset
|
34 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
|
35 } |
1424 | 36 /* |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1330
diff
changeset
|
37 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
|
38 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
|
39 fileName = "stdin:"; |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
40 } else if( fileName.indexOf(':') == -1 ) { |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
41 fileName = "file:" + fileName; |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
42 } |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
43 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
|
44 if( src == null ) |
1316
11d3640e739d
load_file returns nil for missing file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1302
diff
changeset
|
45 return null; |
1335 | 46 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
|
47 } |
1424 | 48 */ |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
49 public static LuanFunction pairs(Luan luan,final LuanTable t) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
50 Utils.checkNotNull(t); |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
51 return t.pairs(luan); |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
52 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
53 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
54 private static class Ipairs extends LuanFunction implements LuanCloneable, Cloneable { |
1335 | 55 List<Object> list; |
56 int i = 0; | |
57 final int size; | |
58 | |
59 Ipairs(LuanTable t) { | |
60 list = t.asList(); | |
61 size = list.size(); | |
62 } | |
44
57054fa43189
implement table lib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
43
diff
changeset
|
63 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
64 @Override public Object[] call(Luan luan,Object[] args) { |
1335 | 65 if( i >= size ) |
66 return LuanFunction.NOTHING; | |
67 Object val = list.get(i++); | |
68 return new Object[]{i,val}; | |
69 } | |
70 | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
71 @Override public final Ipairs shallowClone() { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
72 try { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
73 return (Ipairs)clone(); |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
74 } catch(CloneNotSupportedException e) { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
75 throw new RuntimeException(e); |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
76 } |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
77 } |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
78 |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
79 @Override public final void deepenClone(LuanCloneable dc,LuanCloner cloner) { |
1335 | 80 Ipairs clone = (Ipairs)dc; |
81 clone.list = (List)cloner.clone(list); | |
82 } | |
1561 | 83 |
84 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { | |
85 throw new LuanException("ipairs cannot be made immutable"); | |
86 } | |
1335 | 87 } |
88 | |
89 public static LuanFunction ipairs(LuanTable t) throws LuanException { | |
90 Utils.checkNotNull(t); | |
91 return new Ipairs(t); | |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
92 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
93 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
94 public static Object get_metatable(LuanTable table) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
95 Utils.checkNotNull(table); |
471
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
96 LuanTable metatable = table.getMetatable(); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
97 if( metatable == null ) |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
98 return null; |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
99 Object obj = metatable.rawGet("__metatable"); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
100 return obj!=null ? obj : metatable; |
35
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
101 } |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
102 |
1267 | 103 public static void set_metatable(LuanTable table,LuanTable metatable) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
104 Utils.checkNotNull(table); |
1267 | 105 if( table.getHandler("__metatable") != null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
106 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
|
107 table.setMetatable(metatable); |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
108 } |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
109 |
39
e5bcb1eeafc1
change naming convention
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
37
diff
changeset
|
110 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
|
111 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
|
112 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
113 |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
114 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
|
115 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
|
116 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
117 |
1330 | 118 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
|
119 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
|
120 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
121 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
122 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
|
123 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
|
124 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
|
125 return s.length(); |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
126 } |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
127 if( v instanceof LuanTable ) { |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
128 LuanTable t = (LuanTable)v; |
432
d9df6d6cb927
finish fixing LuanTable to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
427
diff
changeset
|
129 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
|
130 } |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
131 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
|
132 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
133 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
134 public static String to_string(Luan luan,Object v) throws LuanException { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
135 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
|
136 } |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
137 |
1333
25746915a241
merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
1330
diff
changeset
|
138 public static LuanTable new_error(Luan luan,Object msg) throws LuanException { |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
139 String s = luan.luanToString(msg); |
1267 | 140 LuanTable tbl = new LuanException(s).table(luan); |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
141 tbl.rawPut( "message", msg ); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
142 return tbl; |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
143 } |
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
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 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
|
146 return v; |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
147 } |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
148 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
149 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
|
150 return v; |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
151 } |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
152 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
153 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
|
154 return v; |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
155 } |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
156 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1214
diff
changeset
|
157 public static float assert_float(float v) { |
1130 | 158 return v; |
159 } | |
160 | |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
161 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
|
162 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
|
163 if( step == 0.0 ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
164 throw new LuanException("bad argument #3 (step may not be zero)"); |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
165 return new LuanFunction() { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
166 double v = from; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
167 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
168 @Override public Object call(Luan luan,Object[] args) { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
169 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
|
170 return LuanFunction.NOTHING; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
171 double rtn = v; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
172 v += step; |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
173 return rtn; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
174 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
175 }; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
176 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
177 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
178 private static class Values extends LuanFunction implements LuanCloneable, Cloneable { |
1335 | 179 Object[] args; |
180 int i = 0; | |
181 | |
182 Values(Object[] args) { | |
183 this.args = args; | |
184 } | |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
185 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
186 @Override public Object[] call(Luan luan,Object[] x) { |
1335 | 187 if( i >= args.length ) |
188 return LuanFunction.NOTHING; | |
189 Object val = args[i++]; | |
190 return new Object[]{i,val}; | |
191 } | |
192 | |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
193 @Override public final Values shallowClone() { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
194 try { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
195 return (Values)clone(); |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
196 } catch(CloneNotSupportedException e) { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
197 throw new RuntimeException(e); |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
198 } |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
199 } |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
200 |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
201 @Override public final void deepenClone(LuanCloneable dc,LuanCloner cloner) { |
1335 | 202 Values clone = (Values)dc; |
203 clone.args = (Object[])cloner.clone(args); | |
204 } | |
1561 | 205 |
206 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { | |
207 throw new LuanException("values cannot be made immutable"); | |
208 } | |
1335 | 209 } |
210 | |
211 public static LuanFunction values(final Object... args) throws LuanException { | |
212 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
|
213 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
214 |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
215 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
|
216 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
|
217 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
218 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
219 public static String number_type(Number v) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
220 Utils.checkNotNull(v); |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
221 return v.getClass().getSimpleName().toLowerCase(); |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
222 } |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
223 |
1095
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
224 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
|
225 if( obj == null ) { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
226 return 0; |
1214
bae51e2d34c9
fix binary hash_code
Franklin Schmidt <fschmidt@gmail.com>
parents:
1189
diff
changeset
|
227 } else if( obj instanceof byte[] ) { |
bae51e2d34c9
fix binary hash_code
Franklin Schmidt <fschmidt@gmail.com>
parents:
1189
diff
changeset
|
228 return Arrays.hashCode((byte[])obj); |
1095
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
229 } else { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
230 return obj.hashCode(); |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
231 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
232 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
233 |
1563
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
234 public static String stringify(Object obj,LuanTable options,LuanTable subOptions) throws LuanException { |
8fbcc4747091
remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
1562
diff
changeset
|
235 LuanToString lts = new LuanToString(options,subOptions); |
1388
2024d23ddd64
add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents:
1340
diff
changeset
|
236 return lts.toString(obj); |
1189 | 237 } |
238 | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
239 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
|
240 JsonToString jts = new JsonToString(); |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
241 if( options != null ) { |
1420 | 242 options = new LuanTable(options); |
243 Boolean compressed = Utils.removeBoolean(options,"compressed"); | |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
244 if( compressed != null ) |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
245 jts.compressed = compressed; |
1420 | 246 Utils.checkEmpty(options); |
1419
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
247 } |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
248 return jts.toString(Luan.toJava(obj)); |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
249 } |
59fd2e8b1b9d
stringify and json_string
Franklin Schmidt <fschmidt@gmail.com>
parents:
1389
diff
changeset
|
250 |
1330 | 251 private void BasicLuan() {} // never |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
252 } |