Mercurial Hosting > luan
changeset 58:d6c454b7f58c
make concat work with any type;
improve JavaLib.getMembers();
git-svn-id: https://luan-java.googlecode.com/svn/trunk@59 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Mon, 07 Jan 2013 00:18:35 +0000 |
parents | 19ca9c4c6c7f |
children | 5c9cadd0acce |
files | src/luan/interp/ConcatExpr.java src/luan/lib/JavaLib.java |
diffstat | 2 files changed, 24 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/interp/ConcatExpr.java Sun Jan 06 19:17:56 2013 +0000 +++ b/src/luan/interp/ConcatExpr.java Mon Jan 07 00:18:35 2013 +0000 @@ -15,8 +15,9 @@ @Override public Object eval(LuanStateImpl luan) throws LuanException { Object o1 = op1.eval(luan); Object o2 = op2.eval(luan); - String s1 = Luan.asString(o1); - String s2 = Luan.asString(o2); + String s1 = luan.toString(op1.se(),o1); + String s2 = luan.toString(op2.se(),o2); +/* if( s1 != null && s2 != null ) return s1 + s2; LuanFunction fn = luan.getBinHandler(se,"__concat",o1,o2); @@ -24,5 +25,7 @@ return Luan.first(luan.call(fn,se,"__concat",o1,o2)); String type = s1==null ? Luan.type(o1) : Luan.type(o2); throw new LuanException( luan, se, "attempt to concatenate a " + type + " value" ); +*/ + return s1 + s2; } }
--- a/src/luan/lib/JavaLib.java Sun Jan 06 19:17:56 2013 +0000 +++ b/src/luan/lib/JavaLib.java Mon Jan 07 00:18:35 2013 +0000 @@ -150,6 +150,15 @@ Map<String,List<Member>> clsMap = memberMap.get(cls); if( clsMap == null ) { clsMap = new HashMap<String,List<Member>>(); + for( Method method : cls.getMethods() ) { + String s = method.getName(); + List<Member> list = clsMap.get(s); + if( list == null ) { + list = new ArrayList<Member>(); + clsMap.put(s,list); + } + list.add(method); + } for( Class c : cls.getClasses() ) { String s = c.getSimpleName(); List<Member> list = clsMap.get(s); @@ -161,22 +170,19 @@ } for( Field field : cls.getFields() ) { String s = field.getName(); + try { + if( !cls.getField(s).equals(field) ) + continue; // not accessible + } catch(NoSuchFieldException e) { + throw new RuntimeException(e); + } List<Member> list = clsMap.get(s); - if( list == null ) { - list = new ArrayList<Member>(); - clsMap.put(s,list); - } + if( list != null ) + throw new RuntimeException("can't add field '"+s+"' to "+cls+" because these are already defined: "+list); + list = new ArrayList<Member>(); + clsMap.put(s,list); list.add(field); } - for( Method method : cls.getMethods() ) { - String s = method.getName(); - List<Member> list = clsMap.get(s); - if( list == null ) { - list = new ArrayList<Member>(); - clsMap.put(s,list); - } - list.add(method); - } memberMap.put(cls,clsMap); } List<Member> rtn = clsMap.get(name);