Mercurial Hosting > luan
diff src/luan/modules/JavaLuan.java @ 1563:8fbcc4747091
remove LuanFunction.luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 09 Nov 2020 01:37:57 -0700 |
parents | b89212fd04b5 |
children | c922446f53aa |
line wrap: on
line diff
--- a/src/luan/modules/JavaLuan.java Sun Nov 08 16:50:59 2020 -0700 +++ b/src/luan/modules/JavaLuan.java Mon Nov 09 01:37:57 2020 -0700 @@ -52,11 +52,11 @@ Constructor[] constructors = cls.getConstructors(); if( constructors.length > 0 ) { if( constructors.length==1 ) { - return new LuanJavaFunction(luan,constructors[0],null); + return new LuanJavaFunction(constructors[0],null); } else { List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>(); for( Constructor constructor : constructors ) { - fns.add(new LuanJavaFunction(luan,constructor,null)); + fns.add(new LuanJavaFunction(constructor,null)); } return new AmbiguousJavaFunction(fns); } @@ -66,11 +66,11 @@ return new LuanJavaFunction(assertClass,new AssertClass(cls)); */ } else if( "luan_proxy".equals(name) ) { - return new LuanJavaFunction(luan,luan_proxyMethod,st); + return new LuanJavaFunction(luan_proxyMethod,st); } else { List<Member> members = getStaticMembers(cls,name); if( !members.isEmpty() ) { - return member(luan,null,members); + return member(null,members); } } } @@ -88,11 +88,11 @@ } else if( key instanceof String ) { String name = (String)key; if( "instanceof".equals(name) ) { - return new LuanJavaFunction(luan,instanceOf,new InstanceOf(obj)); + return new LuanJavaFunction(instanceOf,new InstanceOf(obj)); } else { List<Member> members = getMembers(cls,name); if( !members.isEmpty() ) { - return member(luan,obj,members); + return member(obj,members); } } } @@ -101,7 +101,7 @@ throw new LuanException( "invalid index '"+key+"' for java "+cls ); } - private static Object member(Luan luan,Object obj,List<Member> members) throws LuanException { + private static Object member(Object obj,List<Member> members) throws LuanException { try { if( members.size()==1 ) { Member member = members.get(0); @@ -113,13 +113,13 @@ return rtn instanceof Object[] ? Arrays.asList((Object[])rtn) : rtn; } else { Method method = (Method)member; - return new LuanJavaFunction(luan,method,obj); + return new LuanJavaFunction(method,obj); } } else { List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>(); for( Member member : members ) { Method method = (Method)member; - fns.add(new LuanJavaFunction(luan,method,obj)); + fns.add(new LuanJavaFunction(method,obj)); } return new AmbiguousJavaFunction(fns); } @@ -302,7 +302,7 @@ return cls.isSynthetic(); } - public Object luan_proxy(Luan luan,final LuanTable t) throws LuanException { + public Object luan_proxy(final Luan luan,final LuanTable t) throws LuanException { return Proxy.newProxyInstance( cls.getClassLoader(), new Class[]{cls}, @@ -317,7 +317,7 @@ if( fnObj == null ) throw new NullPointerException("luan_proxy couldn't find method '"+name+"'"); LuanFunction fn = Luan.checkFunction(fnObj); - return Luan.first(fn.call(args)); + return Luan.first(fn.call(luan,args)); } } ); @@ -359,7 +359,6 @@ private List<LuanJavaFunction> varArgs = new ArrayList<LuanJavaFunction>(); AmbiguousJavaFunction(List<LuanJavaFunction> fns) { - super(true); for( LuanJavaFunction fn : fns ) { if( fn.isVarArgs() ) { varArgs.add(fn); @@ -376,31 +375,18 @@ Collections.sort(varArgs,varArgsSorter); } - @Override protected void completeClone(LuanFunction dc,LuanCloner cloner) { - AmbiguousJavaFunction clone = (AmbiguousJavaFunction)dc; - clone.fnMap = (Map)cloner.clone(fnMap); - clone.varArgs = (List)cloner.clone(varArgs); - // no call to super? - } - - @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { - immutabler.makeImmutable(fnMap); - immutabler.makeImmutable(varArgs); - super.makeImmutable(immutabler); - } - - @Override public Object call(Object[] args) throws LuanException { + @Override public Object call(Luan luan,Object[] args) throws LuanException { List<LuanJavaFunction> list = fnMap.get(args.length); if( list != null ) { for( LuanJavaFunction fn : list ) { try { - return fn.rawCall(args); + return fn.rawCall(luan,args); } catch(IllegalArgumentException e) {} } } for( LuanJavaFunction fn : varArgs ) { try { - return fn.rawCall(args); + return fn.rawCall(luan,args); } catch(IllegalArgumentException e) {} } throw new LuanException("no method matched args: "+Arrays.asList(args));