Mercurial Hosting > luan
diff core/src/luan/modules/JavaLuan.java @ 509:e3b0846dc2ef
throw exception for invalid indexes of string, binary, or java
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 22 May 2015 02:02:49 -0600 |
parents | 92c3d22745b8 |
children | 2da0bcb979b5 |
line wrap: on
line diff
--- a/core/src/luan/modules/JavaLuan.java Thu May 21 20:20:54 2015 -0600 +++ b/core/src/luan/modules/JavaLuan.java Fri May 22 02:02:49 2015 -0600 @@ -23,6 +23,7 @@ import luan.LuanFunction; import luan.LuanJavaFunction; import luan.LuanElement; +import luan.LuanBit; public final class JavaLuan { @@ -46,6 +47,19 @@ throw luan.exception("Java isn't allowed"); } + static final Object FAIL = new Object(); + + public static Object __index(LuanBit bit,Object obj,Object key) throws LuanException { + LuanState luan = bit.luan; + Object rtn = __index(luan,obj,key); + if( rtn != FAIL ) + return rtn; + if( bit.el != null ) + throw bit.exception( "invalid index ["+luan.toString(key)+"] for ("+bit.el.text()+") java: "+obj.getClass() ); + else + throw bit.exception( "invalid index ["+luan.toString(key)+"] for java: "+obj.getClass() ); + } + public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { checkJava(luan); if( obj instanceof Static ) { @@ -81,33 +95,32 @@ } } } - throw luan.exception("invalid member '"+key+"' for: "+obj); - } - Class cls = obj.getClass(); - if( cls.isArray() ) { - if( "length".equals(key) ) { - return Array.getLength(obj); - } - Integer i = Luan.asInteger(key); - if( i != null ) { - return Array.get(obj,i); + } else { + Class cls = obj.getClass(); + if( cls.isArray() ) { + if( "length".equals(key) ) { + return Array.getLength(obj); + } + Integer i = Luan.asInteger(key); + if( i != null ) { + return Array.get(obj,i); + } + throw luan.exception("invalid member '"+key+"' for java array: "+obj); } - throw luan.exception("invalid member '"+key+"' for java array: "+obj); - } - if( key instanceof String ) { - String name = (String)key; - if( "instanceof".equals(name) ) { - return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); - } else { - List<Member> members = getMembers(cls,name); - if( !members.isEmpty() ) { - return member(obj,members); + if( key instanceof String ) { + String name = (String)key; + if( "instanceof".equals(name) ) { + return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); + } else { + List<Member> members = getMembers(cls,name); + if( !members.isEmpty() ) { + return member(obj,members); + } } } } -// throw luan.exception("invalid member '"+key+"' for java object: "+obj); //System.out.println("invalid member '"+key+"' for java object: "+obj); - return null; + return FAIL; } private static Object member(Object obj,List<Member> members) throws LuanException {