Mercurial Hosting > luan
annotate src/luan/modules/BasicLuan.java @ 1175:d6d0bd05ad8c
exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Feb 2018 14:55:28 -0700 |
parents | 7ef40e1923b7 |
children | 73d754b1889f |
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; |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
10 import luan.Luan; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
11 import luan.LuanState; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
12 import luan.LuanTable; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
13 import luan.LuanFunction; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
14 import luan.LuanException; |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
15 import luan.LuanMethod; |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 |
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
17 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
18 public final class BasicLuan { |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
20 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
|
21 return Luan.type(obj); |
4
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
22 } |
24fd6381caca
add to interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
3
diff
changeset
|
23 |
694
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
24 public static LuanFunction load(String text,String sourceName,LuanTable env) |
128
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
25 throws LuanException |
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
26 { |
694
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
27 Utils.checkNotNull(text); |
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
28 Utils.checkNotNull(sourceName,1); |
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
29 return Luan.load(text,sourceName,env); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
30 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
10
diff
changeset
|
31 |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
32 public static LuanFunction load_file(LuanState luan,String fileName) throws LuanException { |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
33 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
|
34 fileName = "stdin:"; |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
35 } else if( fileName.indexOf(':') == -1 ) { |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
36 fileName = "file:" + fileName; |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
37 } |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
687
diff
changeset
|
38 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
|
39 if( src == null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
40 throw new LuanException("file '"+fileName+"' not found" ); |
694
b620b8e1010f
remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
41 return load(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
|
42 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
43 |
432
d9df6d6cb927
finish fixing LuanTable to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
427
diff
changeset
|
44 public static LuanFunction pairs(final LuanState luan,final LuanTable t) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
45 Utils.checkNotNull(t); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
46 return t.pairs(luan); |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
47 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
48 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
49 public static LuanFunction ipairs(final LuanTable t) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
50 Utils.checkNotNull(t); |
221
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
51 return new LuanFunction() { |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
52 List<Object> list = t.asList(); |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
53 int i = 0; |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
54 final int size = list.size(); |
44
57054fa43189
implement table lib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
43
diff
changeset
|
55 |
221
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
56 @Override public Object[] call(LuanState luan,Object[] args) { |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
57 if( i >= size ) |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
58 return LuanFunction.NOTHING; |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
59 Object val = list.get(i++); |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
60 return new Object[]{i,val}; |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
61 } |
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
62 }; |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
63 } |
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
36
diff
changeset
|
64 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
65 public static Object get_metatable(LuanTable table) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
66 Utils.checkNotNull(table); |
471
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
67 LuanTable metatable = table.getMetatable(); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
68 if( metatable == null ) |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
69 return null; |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
70 Object obj = metatable.rawGet("__metatable"); |
f3a24435d04d
add support for __metatable
Franklin Schmidt <fschmidt@gmail.com>
parents:
462
diff
changeset
|
71 return obj!=null ? obj : metatable; |
35
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
72 } |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
73 |
1166
7ef40e1923b7
add back Thread.global
Franklin Schmidt <fschmidt@gmail.com>
parents:
1164
diff
changeset
|
74 public static void set_metatable(LuanState luan,LuanTable table,LuanTable metatable) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
75 Utils.checkNotNull(table); |
1166
7ef40e1923b7
add back Thread.global
Franklin Schmidt <fschmidt@gmail.com>
parents:
1164
diff
changeset
|
76 if( table.getHandler(luan,"__metatable") != null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
77 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
|
78 table.setMetatable(metatable); |
e51906de0f11
implement metatables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
34
diff
changeset
|
79 } |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
80 |
39
e5bcb1eeafc1
change naming convention
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
37
diff
changeset
|
81 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
|
82 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
|
83 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
84 |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
85 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
|
86 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
|
87 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
88 |
491
4dc9cb26a3a8
raw_set and set_metatable now return void instead of LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents:
481
diff
changeset
|
89 public static void raw_set(LuanTable table,Object index,Object value) { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
90 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
|
91 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
92 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 return s.length(); |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
97 } |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
98 if( v instanceof LuanTable ) { |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
99 LuanTable t = (LuanTable)v; |
432
d9df6d6cb927
finish fixing LuanTable to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
427
diff
changeset
|
100 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
|
101 } |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
102 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
|
103 } |
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
104 |
49
8ede219cd111
add WebShell
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
48
diff
changeset
|
105 public static String to_string(LuanState luan,Object v) throws LuanException { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
106 return luan.toString(v); |
36
2a35154aec14
implement more basic lib functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
35
diff
changeset
|
107 } |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
108 |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
473
diff
changeset
|
109 public static LuanTable new_error(LuanState luan,Object msg) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
110 String s = luan.toString(msg); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
111 LuanTable tbl = new LuanException(s).table(); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
112 tbl.rawPut( "message", msg ); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
113 return tbl; |
41
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
114 } |
c53dc854e6cc
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
115 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
116 public static int assert_integer(int v) throws LuanException { |
233
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
117 return v; |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
118 } |
ef39bc4d3f70
basic lucene works
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
119 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
120 public static long assert_long(long v) throws LuanException { |
290
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
121 return v; |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
122 } |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
265
diff
changeset
|
123 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
124 public static double assert_double(double v) throws LuanException { |
537
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
125 return v; |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
126 } |
5fed3de0aac7
add Luan.assert_double and add assert_* to Web_search query env
Franklin Schmidt <fschmidt@gmail.com>
parents:
536
diff
changeset
|
127 |
1130 | 128 public static float assert_float(float v) throws LuanException { |
129 return v; | |
130 } | |
131 | |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
132 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
|
133 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
|
134 if( step == 0.0 ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
135 throw new LuanException("bad argument #3 (step may not be zero)"); |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
136 return new LuanFunction() { |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
137 double v = from; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
138 |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
139 @Override public Object call(LuanState luan,Object[] args) { |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
140 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
|
141 return LuanFunction.NOTHING; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
142 double rtn = v; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
143 v += step; |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
144 return rtn; |
109
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
145 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
146 }; |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
147 } |
219e05867366
remove NumericForStmt;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
108
diff
changeset
|
148 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
149 public static LuanFunction values(final Object... args) throws LuanException { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
150 return new LuanFunction() { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
151 int i = 0; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
152 |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
153 @Override public Object call(LuanState luan,Object[] unused) { |
402 | 154 if( i >= args.length ) |
128
f0a4abe58593
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
155 return LuanFunction.NOTHING; |
402 | 156 return args[i++]; |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
157 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
158 }; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
159 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
160 |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
161 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
|
162 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
|
163 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
164 |
589
97c8ae330efe
add varargs to Luan.try;
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
165 public static Object try_(LuanState luan,LuanTable blocks,Object... args) throws LuanException { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
166 Utils.checkNotNull(blocks); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
167 Object obj = blocks.get(luan,1); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
168 if( obj == null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
169 throw new LuanException("missing 'try' value"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
170 if( !(obj instanceof LuanFunction) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
171 throw new LuanException("bad 'try' value (function expected, got "+Luan.type(obj)+")"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
172 LuanFunction tryFn = (LuanFunction)obj; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
173 LuanFunction catchFn = null; |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
174 obj = blocks.get(luan,"catch"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
175 if( obj != null ) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
176 if( !(obj instanceof LuanFunction) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
177 throw new LuanException("bad 'catch' value (function expected, got "+Luan.type(obj)+")"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
178 catchFn = (LuanFunction)obj; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
179 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
180 LuanFunction finallyFn = null; |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
181 obj = blocks.get(luan,"finally"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
182 if( obj != null ) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
183 if( !(obj instanceof LuanFunction) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
184 throw new LuanException("bad 'finally' value (function expected, got "+Luan.type(obj)+")"); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
185 finallyFn = (LuanFunction)obj; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
186 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
187 try { |
589
97c8ae330efe
add varargs to Luan.try;
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
188 return tryFn.call(luan,args); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
189 } catch(LuanException e) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
190 if( catchFn == null ) |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
191 throw e; |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
192 return catchFn.call(luan,new Object[]{e.table()}); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
193 } finally { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
194 if( finallyFn != null ) |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
195 finallyFn.call(luan); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
196 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
197 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
198 |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
199 @LuanMethod public static Object[] pcall(LuanState luan,LuanFunction f,Object... args) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
200 try { |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
201 Object[] r = Luan.array(f.call(luan,args)); |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
202 Object[] rtn = new Object[r.length+1]; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
203 rtn[0] = true; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
204 for( int i=0; i<r.length; i++ ) { |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
205 rtn[i+1] = r[i]; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
206 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
207 return rtn; |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
208 } catch(LuanException e) { |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
473
diff
changeset
|
209 return new Object[]{false,e.table()}; |
326
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
210 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
211 } |
db37d6aee4db
remove try-catch statement;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
212 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
213 public static String number_type(Number v) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
214 Utils.checkNotNull(v); |
536
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
215 return v.getClass().getSimpleName().toLowerCase(); |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
216 } |
3058870cbe83
add Luan.number_type and Lucene.query.range
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
217 |
1095
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
218 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
|
219 if( obj == null ) { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
220 return 0; |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
221 } else { |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
222 return obj.hashCode(); |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
223 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
224 } |
2443152dc2f1
add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents:
793
diff
changeset
|
225 |
2
4da26b11d12a
start interp
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
226 } |