diff core/src/luan/modules/JavaLuan.java @ 299:a74559240b4f

simplify PackageLuan and remove IO loading param git-svn-id: https://luan-java.googlecode.com/svn/trunk@300 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 16 Dec 2014 06:24:49 +0000
parents 899253043270
children 9fb523472035
line wrap: on
line diff
--- a/core/src/luan/modules/JavaLuan.java	Tue Dec 16 03:51:56 2014 +0000
+++ b/core/src/luan/modules/JavaLuan.java	Tue Dec 16 06:24:49 2014 +0000
@@ -32,20 +32,6 @@
 		return true;
 	}
 
-	static LuanFunction javaLoader(LuanState luan,String modName) throws LuanException {
-		if( !isLoaded(luan) )
-			return null;
-		final Static s = JavaLuan.getClass(luan,modName);
-		if( s==null )
-			return null;
-		LuanFunction loader = new LuanFunction() {
-			@Override public Object call(LuanState luan,Object[] args) {
-				return s;
-			}
-		};
-		return loader;
-	}
-
 	public static Object __index(LuanState luan,Object obj,Object key) throws LuanException {
 		if( obj instanceof Static ) {
 			if( key instanceof String ) {
@@ -304,7 +290,22 @@
 		}
 	}
 
-	public static Static getClass(LuanState luan,String name) throws LuanException {
+	public static Static load(LuanState luan,String name) throws LuanException {
+		@SuppressWarnings("unchecked")
+		Map<String,Static> loaded = (Map<String,Static>)luan.registry().get("Java.loaded");
+		if( loaded == null ) {
+			loaded = new HashMap<String,Static>();
+			luan.registry().put("Java.loaded",loaded);
+		}
+		Static s = loaded.get(name);
+		if( s == null ) {
+			s = getClassStatic(luan,name);
+			loaded.put(name,s);
+		}
+		return s;
+	}
+
+	private static Static getClassStatic(LuanState luan,String name) throws LuanException {
 		Class cls;
 		try {
 			cls = Class.forName(name);