Mercurial Hosting > luan
changeset 511:e3fb9768dbb3
better error messages
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 22 May 2015 10:47:56 -0600 |
parents | 2da0bcb979b5 |
children | d96944467ffc |
files | core/src/luan/LuanTable.java core/src/luan/impl/SetTableEntry.java core/src/luan/modules/JavaLuan.java core/src/luan/modules/StringLuan.java |
diffstat | 4 files changed, 45 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
diff -r 2da0bcb979b5 -r e3fb9768dbb3 core/src/luan/LuanTable.java --- a/core/src/luan/LuanTable.java Fri May 22 02:28:15 2015 -0600 +++ b/core/src/luan/LuanTable.java Fri May 22 10:47:56 2015 -0600 @@ -135,7 +135,7 @@ if( obj instanceof byte[] ) return BinaryLuan.__index(bit,(byte[])obj,key); if( obj != null && luan.hasJava() ) - return JavaLuan.__index(bit,obj,key); + return JavaLuan.__index(bit,obj,key,false); else if( bit.el==null ) throw bit.exception( "attempt to index a " + Luan.type(obj) + " value" ); else
diff -r 2da0bcb979b5 -r e3fb9768dbb3 core/src/luan/impl/SetTableEntry.java --- a/core/src/luan/impl/SetTableEntry.java Fri May 22 02:28:15 2015 -0600 +++ b/core/src/luan/impl/SetTableEntry.java Fri May 22 10:47:56 2015 -0600 @@ -6,6 +6,7 @@ import luan.LuanFunction; import luan.LuanElement; import luan.LuanMeta; +import luan.LuanBit; import luan.modules.JavaLuan; @@ -29,10 +30,11 @@ tbl.put(luan,key,value); return; } + LuanBit bit = luan.bit(el()); if( t != null && luan.hasJava() ) - JavaLuan.__new_index(luan,t,key,value); + JavaLuan.__new_index(bit,t,key,value); else - throw luan.bit(el).exception( "attempt to index '"+tableExpr.el().text()+"' (a " + Luan.type(t) + " value)" ); + throw bit.exception( "attempt to index a " + Luan.type(t) + " value in '"+bit.el.text()+"'" ); } }
diff -r 2da0bcb979b5 -r e3fb9768dbb3 core/src/luan/modules/JavaLuan.java --- a/core/src/luan/modules/JavaLuan.java Fri May 22 02:28:15 2015 -0600 +++ b/core/src/luan/modules/JavaLuan.java Fri May 22 10:47:56 2015 -0600 @@ -49,24 +49,15 @@ static final Object FAIL = new Object(); - public static Object __index(LuanBit bit,Object obj,Object key) throws LuanException { + public static Object __index(LuanBit bit,Object obj,Object key,boolean canReturnFail) 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 for java "+obj.getClass()+" in '"+bit.el.text()+"'" ); - else - throw bit.exception( "invalid index for java "+obj.getClass() ); - } - - public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { checkJava(luan); + Class cls; if( obj instanceof Static ) { + Static st = (Static)obj; + cls = st.cls; if( key instanceof String ) { String name = (String)key; - Static st = (Static)obj; - Class cls = st.cls; if( "class".equals(name) ) { return cls; } else if( "new".equals(name) ) { @@ -96,7 +87,7 @@ } } } else { - Class cls = obj.getClass(); + cls = obj.getClass(); if( cls.isArray() ) { if( "length".equals(key) ) { return Array.getLength(obj); @@ -119,7 +110,12 @@ } } //System.out.println("invalid member '"+key+"' for java object: "+obj); - return FAIL; + if( canReturnFail ) + return FAIL; + if( bit.el != null ) + throw bit.exception( "invalid index for java "+cls+" in '"+bit.el.text()+"'" ); + else + throw bit.exception( "invalid index for java "+cls ); } private static Object member(Object obj,List<Member> members) throws LuanException { @@ -149,13 +145,15 @@ } } - public static void __new_index(LuanState luan,Object obj,Object key,Object value) throws LuanException { + public static void __new_index(LuanBit bit,Object obj,Object key,Object value) throws LuanException { + LuanState luan = bit.luan; checkJava(luan); + Class cls; if( obj instanceof Static ) { + Static st = (Static)obj; + cls = st.cls; if( key instanceof String ) { String name = (String)key; - Static st = (Static)obj; - Class cls = st.cls; List<Member> members = getStaticMembers(cls,name); if( !members.isEmpty() ) { if( members.size() != 1 ) @@ -164,28 +162,31 @@ return; } } - throw luan.exception("invalid member '"+key+"' for: "+obj); - } - Class cls = obj.getClass(); - if( cls.isArray() ) { - Integer i = Luan.asInteger(key); - if( i != null ) { - Array.set(obj,i,value); - return; - } - throw luan.exception("invalid member '"+key+"' for java array: "+obj); - } - if( key instanceof String ) { - String name = (String)key; - List<Member> members = getMembers(cls,name); - if( !members.isEmpty() ) { - if( members.size() != 1 ) - throw new RuntimeException("not field '"+name+"' of "+obj); - setMember(obj,members,value); - return; +// throw luan.exception("invalid member '"+key+"' for: "+obj); + } else { + cls = obj.getClass(); + if( cls.isArray() ) { + Integer i = Luan.asInteger(key); + if( i != null ) { + Array.set(obj,i,value); + return; + } +// throw luan.exception("invalid member '"+key+"' for java array: "+obj); + } else if( key instanceof String ) { + String name = (String)key; + List<Member> members = getMembers(cls,name); + if( !members.isEmpty() ) { + if( members.size() != 1 ) + throw new RuntimeException("not field '"+name+"' of "+obj); + setMember(obj,members,value); + return; + } } } - throw luan.exception("invalid member '"+key+"' for java object: "+obj); + if( bit.el != null ) + throw bit.exception( "invalid index for java "+cls+" in '"+bit.el.text()+"'" ); + else + throw bit.exception( "invalid index for java "+cls ); } private static void setMember(Object obj,List<Member> members,Object value) {
diff -r 2da0bcb979b5 -r e3fb9768dbb3 core/src/luan/modules/StringLuan.java --- a/core/src/luan/modules/StringLuan.java Fri May 22 02:28:15 2015 -0600 +++ b/core/src/luan/modules/StringLuan.java Fri May 22 10:47:56 2015 -0600 @@ -31,7 +31,7 @@ }; } if( luan.hasJava() ) { - Object rtn = JavaLuan.__index(luan,s,key); + Object rtn = JavaLuan.__index(bit,s,key,true); if( rtn != JavaLuan.FAIL ) return rtn; }