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