Mercurial Hosting > luan
comparison core/src/luan/modules/BasicLuan.java @ 646:cdc70de628b5
simplify LuanException
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 29 Mar 2016 19:58:39 -0600 |
parents | 859c0dedc8b6 |
children | d95caff8ba8c |
comparison
equal
deleted
inserted
replaced
645:859c0dedc8b6 | 646:cdc70de628b5 |
---|---|
44 public static LuanFunction load_file(LuanState luan,String fileName,Boolean addExtension) throws LuanException { | 44 public static LuanFunction load_file(LuanState luan,String fileName,Boolean addExtension) throws LuanException { |
45 if( fileName == null ) | 45 if( fileName == null ) |
46 fileName = "stdin:"; | 46 fileName = "stdin:"; |
47 String src = PackageLuan.read(luan,fileName,addExtension); | 47 String src = PackageLuan.read(luan,fileName,addExtension); |
48 if( src == null ) | 48 if( src == null ) |
49 throw new LuanException(luan, "file '"+fileName+"' not found" ); | 49 throw new LuanException("file '"+fileName+"' not found" ); |
50 return load(luan,src,fileName,null,false); | 50 return load(luan,src,fileName,null,false); |
51 } | 51 } |
52 | 52 |
53 public static LuanFunction pairs(final LuanState luan,final LuanTable t) throws LuanException { | 53 public static LuanFunction pairs(final LuanState luan,final LuanTable t) throws LuanException { |
54 Utils.checkNotNull(luan,t); | 54 Utils.checkNotNull(t); |
55 return t.pairs(luan); | 55 return t.pairs(luan); |
56 } | 56 } |
57 | 57 |
58 public static LuanFunction ipairs(LuanState luan,final LuanTable t) throws LuanException { | 58 public static LuanFunction ipairs(final LuanTable t) throws LuanException { |
59 Utils.checkNotNull(luan,t); | 59 Utils.checkNotNull(t); |
60 return new LuanFunction() { | 60 return new LuanFunction() { |
61 List<Object> list = t.asList(); | 61 List<Object> list = t.asList(); |
62 int i = 0; | 62 int i = 0; |
63 final int size = list.size(); | 63 final int size = list.size(); |
64 | 64 |
69 return new Object[]{i,val}; | 69 return new Object[]{i,val}; |
70 } | 70 } |
71 }; | 71 }; |
72 } | 72 } |
73 | 73 |
74 public static Object get_metatable(LuanState luan,LuanTable table) throws LuanException { | 74 public static Object get_metatable(LuanTable table) throws LuanException { |
75 Utils.checkNotNull(luan,table); | 75 Utils.checkNotNull(table); |
76 LuanTable metatable = table.getMetatable(); | 76 LuanTable metatable = table.getMetatable(); |
77 if( metatable == null ) | 77 if( metatable == null ) |
78 return null; | 78 return null; |
79 Object obj = metatable.rawGet("__metatable"); | 79 Object obj = metatable.rawGet("__metatable"); |
80 return obj!=null ? obj : metatable; | 80 return obj!=null ? obj : metatable; |
81 } | 81 } |
82 | 82 |
83 public static void set_metatable(LuanState luan,LuanTable table,LuanTable metatable) throws LuanException { | 83 public static void set_metatable(LuanTable table,LuanTable metatable) throws LuanException { |
84 Utils.checkNotNull(luan,table); | 84 Utils.checkNotNull(table); |
85 if( table.getHandler("__metatable") != null ) | 85 if( table.getHandler("__metatable") != null ) |
86 throw new LuanException(luan,"cannot change a protected metatable"); | 86 throw new LuanException("cannot change a protected metatable"); |
87 table.setMetatable(metatable); | 87 table.setMetatable(metatable); |
88 } | 88 } |
89 | 89 |
90 public static boolean raw_equal(Object v1,Object v2) { | 90 public static boolean raw_equal(Object v1,Object v2) { |
91 return v1 == v2 || v1 != null && v1.equals(v2); | 91 return v1 == v2 || v1 != null && v1.equals(v2); |
97 | 97 |
98 public static void raw_set(LuanTable table,Object index,Object value) { | 98 public static void raw_set(LuanTable table,Object index,Object value) { |
99 table.rawPut(index,value); | 99 table.rawPut(index,value); |
100 } | 100 } |
101 | 101 |
102 public static int raw_len(LuanState luan,Object v) throws LuanException { | 102 public static int raw_len(Object v) throws LuanException { |
103 if( v instanceof String ) { | 103 if( v instanceof String ) { |
104 String s = (String)v; | 104 String s = (String)v; |
105 return s.length(); | 105 return s.length(); |
106 } | 106 } |
107 if( v instanceof LuanTable ) { | 107 if( v instanceof LuanTable ) { |
108 LuanTable t = (LuanTable)v; | 108 LuanTable t = (LuanTable)v; |
109 return t.rawLength(); | 109 return t.rawLength(); |
110 } | 110 } |
111 throw new LuanException(luan, "bad argument #1 to 'raw_len' (table or string expected)" ); | 111 throw new LuanException( "bad argument #1 to 'raw_len' (table or string expected)" ); |
112 } | 112 } |
113 | 113 |
114 public static String to_string(LuanState luan,Object v) throws LuanException { | 114 public static String to_string(LuanState luan,Object v) throws LuanException { |
115 return luan.toString(v); | 115 return luan.toString(v); |
116 } | 116 } |
117 | 117 |
118 public static LuanTable new_error(LuanState luan,Object msg) throws LuanException { | 118 public static LuanTable new_error(LuanState luan,Object msg) throws LuanException { |
119 return new LuanException(luan,msg).table(); | 119 String s = luan.toString(msg); |
120 } | 120 LuanTable tbl = new LuanException(s).table(); |
121 | 121 tbl.rawPut( "message", msg ); |
122 public static String assert_string(LuanState luan,String v) throws LuanException { | 122 return tbl; |
123 Utils.checkNotNull(luan,v); | 123 } |
124 return v; | 124 |
125 } | 125 public static String assert_string(String v) throws LuanException { |
126 | 126 Utils.checkNotNull(v); |
127 public static Number assert_number(LuanState luan,Number v) throws LuanException { | 127 return v; |
128 Utils.checkNotNull(luan,v); | 128 } |
129 return v; | 129 |
130 } | 130 public static Number assert_number(Number v) throws LuanException { |
131 | 131 Utils.checkNotNull(v); |
132 public static LuanTable assert_table(LuanState luan,LuanTable v) throws LuanException { | 132 return v; |
133 Utils.checkNotNull(luan,v); | 133 } |
134 return v; | 134 |
135 } | 135 public static LuanTable assert_table(LuanTable v) throws LuanException { |
136 | 136 Utils.checkNotNull(v); |
137 public static boolean assert_boolean(LuanState luan,boolean v) throws LuanException { | 137 return v; |
138 return v; | 138 } |
139 } | 139 |
140 | 140 public static boolean assert_boolean(boolean v) throws LuanException { |
141 public static int assert_integer(LuanState luan,int v) throws LuanException { | 141 return v; |
142 return v; | 142 } |
143 } | 143 |
144 | 144 public static int assert_integer(int v) throws LuanException { |
145 public static long assert_long(LuanState luan,long v) throws LuanException { | 145 return v; |
146 return v; | 146 } |
147 } | 147 |
148 | 148 public static long assert_long(long v) throws LuanException { |
149 public static double assert_double(LuanState luan,double v) throws LuanException { | 149 return v; |
150 return v; | 150 } |
151 } | 151 |
152 | 152 public static double assert_double(double v) throws LuanException { |
153 @LuanMethod public static byte[] assert_binary(LuanState luan,byte[] v) throws LuanException { | 153 return v; |
154 Utils.checkNotNull(luan,v); | 154 } |
155 return v; | 155 |
156 } | 156 @LuanMethod public static byte[] assert_binary(byte[] v) throws LuanException { |
157 | 157 Utils.checkNotNull(v); |
158 public static LuanFunction assert_function(LuanState luan,LuanFunction v) throws LuanException { | 158 return v; |
159 Utils.checkNotNull(luan,v); | 159 } |
160 return v; | 160 |
161 } | 161 public static LuanFunction assert_function(LuanFunction v) throws LuanException { |
162 | 162 Utils.checkNotNull(v); |
163 public static LuanFunction range(LuanState luan,final double from,final double to,Double stepV) throws LuanException { | 163 return v; |
164 } | |
165 | |
166 public static LuanFunction range(final double from,final double to,Double stepV) throws LuanException { | |
164 final double step = stepV==null ? 1.0 : stepV; | 167 final double step = stepV==null ? 1.0 : stepV; |
165 if( step == 0.0 ) | 168 if( step == 0.0 ) |
166 throw new LuanException(luan,"bad argument #3 (step may not be zero)"); | 169 throw new LuanException("bad argument #3 (step may not be zero)"); |
167 return new LuanFunction() { | 170 return new LuanFunction() { |
168 double v = from; | 171 double v = from; |
169 | 172 |
170 @Override public Object call(LuanState luan,Object[] args) { | 173 @Override public Object call(LuanState luan,Object[] args) { |
171 if( step > 0.0 && v > to || step < 0.0 && v < to ) | 174 if( step > 0.0 && v > to || step < 0.0 && v < to ) |
192 private LuanFunction fn(Object obj) { | 195 private LuanFunction fn(Object obj) { |
193 return obj instanceof LuanFunction ? (LuanFunction)obj : null; | 196 return obj instanceof LuanFunction ? (LuanFunction)obj : null; |
194 } | 197 } |
195 | 198 |
196 public static Object try_(LuanState luan,LuanTable blocks,Object... args) throws LuanException { | 199 public static Object try_(LuanState luan,LuanTable blocks,Object... args) throws LuanException { |
197 Utils.checkNotNull(luan,blocks); | 200 Utils.checkNotNull(blocks); |
198 Object obj = blocks.get(luan,1); | 201 Object obj = blocks.get(luan,1); |
199 if( obj == null ) | 202 if( obj == null ) |
200 throw new LuanException(luan,"missing 'try' value"); | 203 throw new LuanException("missing 'try' value"); |
201 if( !(obj instanceof LuanFunction) ) | 204 if( !(obj instanceof LuanFunction) ) |
202 throw new LuanException(luan,"bad 'try' value (function expected, got "+Luan.type(obj)+")"); | 205 throw new LuanException("bad 'try' value (function expected, got "+Luan.type(obj)+")"); |
203 LuanFunction tryFn = (LuanFunction)obj; | 206 LuanFunction tryFn = (LuanFunction)obj; |
204 LuanFunction catchFn = null; | 207 LuanFunction catchFn = null; |
205 obj = blocks.get(luan,"catch"); | 208 obj = blocks.get(luan,"catch"); |
206 if( obj != null ) { | 209 if( obj != null ) { |
207 if( !(obj instanceof LuanFunction) ) | 210 if( !(obj instanceof LuanFunction) ) |
208 throw new LuanException(luan,"bad 'catch' value (function expected, got "+Luan.type(obj)+")"); | 211 throw new LuanException("bad 'catch' value (function expected, got "+Luan.type(obj)+")"); |
209 catchFn = (LuanFunction)obj; | 212 catchFn = (LuanFunction)obj; |
210 } | 213 } |
211 LuanFunction finallyFn = null; | 214 LuanFunction finallyFn = null; |
212 obj = blocks.get(luan,"finally"); | 215 obj = blocks.get(luan,"finally"); |
213 if( obj != null ) { | 216 if( obj != null ) { |
214 if( !(obj instanceof LuanFunction) ) | 217 if( !(obj instanceof LuanFunction) ) |
215 throw new LuanException(luan,"bad 'finally' value (function expected, got "+Luan.type(obj)+")"); | 218 throw new LuanException("bad 'finally' value (function expected, got "+Luan.type(obj)+")"); |
216 finallyFn = (LuanFunction)obj; | 219 finallyFn = (LuanFunction)obj; |
217 } | 220 } |
218 try { | 221 try { |
219 return tryFn.call(luan,args); | 222 return tryFn.call(luan,args); |
220 } catch(LuanException e) { | 223 } catch(LuanException e) { |
239 } catch(LuanException e) { | 242 } catch(LuanException e) { |
240 return new Object[]{false,e.table()}; | 243 return new Object[]{false,e.table()}; |
241 } | 244 } |
242 } | 245 } |
243 | 246 |
244 public static String number_type(LuanState luan,Number v) throws LuanException { | 247 public static String number_type(Number v) throws LuanException { |
245 Utils.checkNotNull(luan,v); | 248 Utils.checkNotNull(v); |
246 return v.getClass().getSimpleName().toLowerCase(); | 249 return v.getClass().getSimpleName().toLowerCase(); |
247 } | 250 } |
248 | 251 |
249 } | 252 } |