comparison src/luan/lib/JavaLib.java @ 86:6db8f286fa6c

_ENV is per module, not global git-svn-id: https://luan-java.googlecode.com/svn/trunk@87 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 27 Feb 2013 08:03:51 +0000
parents 4bf3d0c0b6b9
children 6ca02b188dba
comparison
equal deleted inserted replaced
85:b2551f00bc51 86:6db8f286fa6c
19 import luan.LuanState; 19 import luan.LuanState;
20 import luan.LuanTable; 20 import luan.LuanTable;
21 import luan.MetatableGetter; 21 import luan.MetatableGetter;
22 import luan.LuanException; 22 import luan.LuanException;
23 import luan.LuanFunction; 23 import luan.LuanFunction;
24 import luan.LuanLoader;
24 import luan.LuanJavaFunction; 25 import luan.LuanJavaFunction;
25 import luan.LuanElement; 26 import luan.LuanElement;
26 27
27 28
28 public final class JavaLib { 29 public final class JavaLib {
29 30
30 public static final String NAME = "java"; 31 public static final String NAME = "java";
31 32
32 public static final LuanFunction LOADER = new LuanFunction() { 33 public static final LuanLoader LOADER = new LuanLoader() {
33 public Object[] call(LuanState luan,Object[] args) throws LuanException { 34 @Override protected void load(LuanState luan) {
34 luan.addMetatableGetter(mg); 35 luan.addMetatableGetter(mg);
35 LuanTable module = new LuanTable(); 36 LuanTable module = new LuanTable();
36 LuanTable global = luan.global(); 37 LuanTable global = new LuanTable();
38 module.put( LuanState._G, global );
37 try { 39 try {
38 global.put( "import", new LuanJavaFunction(JavaLib.class.getMethod("importClass",LuanState.class,String.class),null) ); 40 global.put( "import", new LuanJavaFunction(JavaLib.class.getMethod("importClass",LuanState.class,String.class),null) );
39 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) ); 41 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) );
40 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); 42 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class );
41 } catch(NoSuchMethodException e) { 43 } catch(NoSuchMethodException e) {
42 throw new RuntimeException(e); 44 throw new RuntimeException(e);
43 } 45 }
44 return new Object[]{module}; 46 luan.loaded().put(NAME,module);
45 } 47 }
46 }; 48 };
47 49
48 private static final LuanTable mt = new LuanTable(); 50 private static final LuanTable mt = new LuanTable();
49 static { 51 static {
296 } 298 }
297 return new Static(cls); 299 return new Static(cls);
298 } 300 }
299 301
300 public static void importClass(LuanState luan,String name) throws LuanException { 302 public static void importClass(LuanState luan,String name) throws LuanException {
301 luan.global().put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) ); 303 luan.currentEnvironment().put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) );
302 } 304 }
303 305
304 static class AmbiguousJavaFunction extends LuanFunction { 306 static class AmbiguousJavaFunction extends LuanFunction {
305 private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>(); 307 private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>();
306 308