diff src/luan/lib/PackageLib.java @ 111:2428ecfed375

change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection git-svn-id: https://luan-java.googlecode.com/svn/trunk@112 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 23 May 2014 20:40:05 +0000
parents 3c404a296995
children f5af13062b10
line wrap: on
line diff
--- a/src/luan/lib/PackageLib.java	Fri May 23 04:36:47 2014 +0000
+++ b/src/luan/lib/PackageLib.java	Fri May 23 20:40:05 2014 +0000
@@ -19,7 +19,7 @@
 	public static final String NAME = "Package";
 
 	public static final LuanFunction LOADER = new LuanFunction() {
-		@Override public Object[] call(LuanState luan,Object[] args) {
+		@Override public Object call(LuanState luan,Object[] args) {
 			LuanTable module = new LuanTable();
 			LuanTable global = luan.global();
 			module.put("loaded",luan.loaded());
@@ -36,7 +36,7 @@
 			searchers.add(fileSearcher);
 			searchers.add(javaFileSearcher);
 			module.put("searchers",searchers);
-			return new Object[]{module};
+			return module;
 		}
 	};
 
@@ -62,7 +62,7 @@
 				searchers = new LuanTable(Collections.<Object>singletonList(preloadSearcher));
 			for( Object s : searchers.asList() ) {
 				LuanFunction searcher = (LuanFunction)s;
-				Object[] a = luan.JAVA.call(searcher,"<searcher>",modName);
+				Object[] a = Luan.array(luan.JAVA.call(searcher,"<searcher>",modName));
 				if( a.length >= 1 && a[0] instanceof LuanFunction ) {
 					LuanFunction loader = (LuanFunction)a[0];
 					a[0] = modName;
@@ -93,11 +93,10 @@
 	}
 
 	public static final LuanFunction fileLoader = new LuanFunction() {
-		@Override public Object[] call(LuanState luan,Object[] args) throws LuanException {
-			String modName = (String)args[0];
+		@Override public Object call(LuanState luan,Object[] args) throws LuanException {
 			String fileName = (String)args[1];
 			LuanFunction fn = BasicLib.load_file(luan,fileName);
-			return fn.call(luan,new Object[]{args[0],fileName});
+			return fn.call(luan,args);
 		}
 	};
 
@@ -124,13 +123,13 @@
 
 
 	public static final LuanFunction javaFileLoader = new LuanFunction() {
-		@Override public Object[] call(LuanState luan,Object[] args) throws LuanException {
-			String modName = (String)args[0];
-			URL url = (URL)args[0];
+		@Override public Object call(LuanState luan,Object[] args) throws LuanException {
+			String urlStr = (String)args[1];
 			try {
+				URL url = new URL(urlStr);
 				String src = Utils.read(url);
-				LuanFunction fn = BasicLib.load(luan,src,url.toString(),false);
-				return fn.call(luan,new Object[]{args[0],url.toString()});
+				LuanFunction fn = BasicLib.load(luan,src,urlStr,false);
+				return fn.call(luan,args);
 			} catch(IOException e) {
 				throw luan.JAVA.exception(e);
 			}
@@ -147,7 +146,7 @@
 				String file = s.replaceAll("\\?",modName);
 				URL url = ClassLoader.getSystemResource(file);
 				if( url != null ) {
-					return new Object[]{javaFileLoader,url};
+					return new Object[]{javaFileLoader,url.toString()};
 				}
 			}
 			return LuanFunction.EMPTY;