Mercurial Hosting > luan
comparison core/src/luan/modules/JavaLuan.java @ 578:60c549d43988
remove LuanState.exception()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 14 Jul 2015 17:40:48 -0600 |
parents | 4723d22062ce |
children | 859c0dedc8b6 |
comparison
equal
deleted
inserted
replaced
577:d7a85fbe15f1 | 578:60c549d43988 |
---|---|
41 } | 41 } |
42 } | 42 } |
43 | 43 |
44 private static void checkJava(LuanState luan) throws LuanException { | 44 private static void checkJava(LuanState luan) throws LuanException { |
45 if( !luan.hasJava() ) | 45 if( !luan.hasJava() ) |
46 throw luan.exception("Java isn't allowed"); | 46 throw new LuanException(luan,"Java isn't allowed"); |
47 } | 47 } |
48 | 48 |
49 static final Object FAIL = new Object(); | 49 static final Object FAIL = new Object(); |
50 | 50 |
51 public static Object __index(LuanState luan,Object obj,Object key,boolean canReturnFail) throws LuanException { | 51 public static Object __index(LuanState luan,Object obj,Object key,boolean canReturnFail) throws LuanException { |
92 } | 92 } |
93 Integer i = Luan.asInteger(key); | 93 Integer i = Luan.asInteger(key); |
94 if( i != null ) { | 94 if( i != null ) { |
95 return Array.get(obj,i); | 95 return Array.get(obj,i); |
96 } | 96 } |
97 // throw luan.exception("invalid member '"+key+"' for java array: "+obj); | 97 // throw new LuanException(luan,"invalid member '"+key+"' for java array: "+obj); |
98 } else if( key instanceof String ) { | 98 } else if( key instanceof String ) { |
99 String name = (String)key; | 99 String name = (String)key; |
100 if( "instanceof".equals(name) ) { | 100 if( "instanceof".equals(name) ) { |
101 return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); | 101 return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); |
102 } else { | 102 } else { |
108 } | 108 } |
109 } | 109 } |
110 //System.out.println("invalid member '"+key+"' for java object: "+obj); | 110 //System.out.println("invalid member '"+key+"' for java object: "+obj); |
111 if( canReturnFail ) | 111 if( canReturnFail ) |
112 return FAIL; | 112 return FAIL; |
113 throw luan.exception( "invalid index for java "+cls+" in '"+luan.context()+"'" ); | 113 throw new LuanException(luan, "invalid index for java "+cls+" in '"+luan.context()+"'" ); |
114 } | 114 } |
115 | 115 |
116 private static Object member(Object obj,List<Member> members) throws LuanException { | 116 private static Object member(Object obj,List<Member> members) throws LuanException { |
117 try { | 117 try { |
118 if( members.size()==1 ) { | 118 if( members.size()==1 ) { |
154 throw new RuntimeException("not field '"+name+"' of "+obj); | 154 throw new RuntimeException("not field '"+name+"' of "+obj); |
155 setMember(obj,members,value); | 155 setMember(obj,members,value); |
156 return; | 156 return; |
157 } | 157 } |
158 } | 158 } |
159 // throw luan.exception("invalid member '"+key+"' for: "+obj); | 159 // throw new LuanException(luan,"invalid member '"+key+"' for: "+obj); |
160 } else { | 160 } else { |
161 cls = obj.getClass(); | 161 cls = obj.getClass(); |
162 if( cls.isArray() ) { | 162 if( cls.isArray() ) { |
163 Integer i = Luan.asInteger(key); | 163 Integer i = Luan.asInteger(key); |
164 if( i != null ) { | 164 if( i != null ) { |
165 Array.set(obj,i,value); | 165 Array.set(obj,i,value); |
166 return; | 166 return; |
167 } | 167 } |
168 // throw luan.exception("invalid member '"+key+"' for java array: "+obj); | 168 // throw new LuanException(luan,"invalid member '"+key+"' for java array: "+obj); |
169 } else if( key instanceof String ) { | 169 } else if( key instanceof String ) { |
170 String name = (String)key; | 170 String name = (String)key; |
171 List<Member> members = getMembers(cls,name); | 171 List<Member> members = getMembers(cls,name); |
172 if( !members.isEmpty() ) { | 172 if( !members.isEmpty() ) { |
173 if( members.size() != 1 ) | 173 if( members.size() != 1 ) |
175 setMember(obj,members,value); | 175 setMember(obj,members,value); |
176 return; | 176 return; |
177 } | 177 } |
178 } | 178 } |
179 } | 179 } |
180 throw luan.exception( "invalid index for java "+cls+" in '"+luan.context()+"'" ); | 180 throw new LuanException(luan, "invalid index for java "+cls+" in '"+luan.context()+"'" ); |
181 } | 181 } |
182 | 182 |
183 private static void setMember(Object obj,List<Member> members,Object value) { | 183 private static void setMember(Object obj,List<Member> members,Object value) { |
184 Field field = (Field)members.get(0); | 184 Field field = (Field)members.get(0); |
185 try { | 185 try { |
376 for( LuanJavaFunction fn : fnMap.get(args.length) ) { | 376 for( LuanJavaFunction fn : fnMap.get(args.length) ) { |
377 try { | 377 try { |
378 return fn.rawCall(luan,args); | 378 return fn.rawCall(luan,args); |
379 } catch(IllegalArgumentException e) {} | 379 } catch(IllegalArgumentException e) {} |
380 } | 380 } |
381 throw luan.exception("no method matched args: "+Arrays.asList(args)); | 381 throw new LuanException(luan,"no method matched args: "+Arrays.asList(args)); |
382 } | 382 } |
383 } | 383 } |
384 | 384 |
385 private static class InstanceOf { | 385 private static class InstanceOf { |
386 private final Object obj; | 386 private final Object obj; |
413 | 413 |
414 public Object assertClass(LuanState luan,Object v) throws LuanException { | 414 public Object assertClass(LuanState luan,Object v) throws LuanException { |
415 if( !cls.isInstance(v) ) { | 415 if( !cls.isInstance(v) ) { |
416 String got = v.getClass().getSimpleName(); | 416 String got = v.getClass().getSimpleName(); |
417 String expected = cls.getSimpleName(); | 417 String expected = cls.getSimpleName(); |
418 throw luan.exception("bad argument #1 ("+expected+" expected, got "+got+")"); | 418 throw new LuanException(luan,"bad argument #1 ("+expected+" expected, got "+got+")"); |
419 } | 419 } |
420 return v; | 420 return v; |
421 } | 421 } |
422 } | 422 } |
423 private static final Method assertClass; | 423 private static final Method assertClass; |