Mercurial Hosting > luan
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 |