diff core/src/luan/modules/JavaLuan.java @ 202:75750ceb45ee

add LuanState.registry git-svn-id: https://luan-java.googlecode.com/svn/trunk@203 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 04 Jul 2014 17:18:39 +0000
parents 4c96cb73dd93
children 5ba136769034
line wrap: on
line diff
--- a/core/src/luan/modules/JavaLuan.java	Thu Jul 03 22:42:44 2014 +0000
+++ b/core/src/luan/modules/JavaLuan.java	Fri Jul 04 17:18:39 2014 +0000
@@ -32,22 +32,25 @@
 	public static final LuanFunction LOADER = new LuanFunction() {
 		@Override public Object call(LuanState luan,Object[] args) {
 			LuanTable module = new LuanTable();
-			MyMetatableGetter mmg = new MyMetatableGetter();
-			mmg.init();
-			module.put( MetatableGetter.KEY, mmg );
+			module.put( MetatableGetter.KEY, new MyMetatableGetter() );
 			try {
 				module.put( "class", new LuanJavaFunction(JavaLuan.class.getMethod("getClass",LuanState.class,String.class),null) );
 				add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class );
 			} catch(NoSuchMethodException e) {
 				throw new RuntimeException(e);
 			}
-			luan.searchers().add(javaSearcher);
 			return module;
 		}
 	};
 
+	private static boolean isLoaded(LuanState luan) {
+		return PackageLuan.loaded(luan).get("Java") != null;
+	}
+
 	public static final LuanFunction javaSearcher = new LuanFunction() {
 		@Override public Object call(LuanState luan,Object[] args) throws LuanException {
+			if( !isLoaded(luan) )
+				return LuanFunction.NOTHING;
 			String modName = (String)args[0];
 			final Static s = JavaLuan.getClass(luan,modName);
 			if( s==null )
@@ -72,9 +75,7 @@
 	public static class MyMetatableGetter implements MetatableGetter {
 		private LuanTable metatable;
 
-		private MyMetatableGetter() {}
-
-		private void init() {
+		private MyMetatableGetter() {
 			this.metatable = new LuanTable();
 			try {
 				metatable.put( "__index", new LuanJavaFunction(
@@ -86,8 +87,10 @@
 			add( metatable, "__newindex", LuanState.class, Object.class, Object.class, Object.class );
 		}
 
+		private MyMetatableGetter(MyMetatableGetter mmg) {}
+
 		@Override public MetatableGetter shallowClone() {
-			return new MyMetatableGetter();
+			return new MyMetatableGetter(this);
 		}
 
 		@Override public void deepenClone(MetatableGetter c,DeepCloner cloner) {