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));