Mercurial Hosting > luan
comparison src/luan/lib/JavaLib.java @ 73:f86e4f77ef32
add package module
git-svn-id: https://luan-java.googlecode.com/svn/trunk@74 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 12 Feb 2013 09:46:45 +0000 |
parents | 5a93129995e1 |
children | f003338d503b |
comparison
equal
deleted
inserted
replaced
72:cd9dbd7477ca | 73:f86e4f77ef32 |
---|---|
25 import luan.LuanElement; | 25 import luan.LuanElement; |
26 | 26 |
27 | 27 |
28 public final class JavaLib { | 28 public final class JavaLib { |
29 | 29 |
30 public static void register(LuanState luan) { | 30 public static final String NAME = "java"; |
31 luan.addMetatableGetter(mg); | 31 |
32 LuanTable module = new LuanTable(); | 32 public static final LuanFunction LOADER = new LuanFunction() { |
33 LuanTable global = luan.global(); | 33 public Object[] call(LuanState luan,Object[] args) throws LuanException { |
34 global.put("java",module); | 34 luan.addMetatableGetter(mg); |
35 try { | 35 LuanTable module = new LuanTable(); |
36 global.put( "import", new LuanJavaFunction(JavaLib.class.getMethod("importClass",LuanState.class,String.class),null) ); | 36 LuanTable global = luan.global; |
37 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) ); | 37 global.put(NAME,module); |
38 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); | 38 try { |
39 } catch(NoSuchMethodException e) { | 39 global.put( "import", new LuanJavaFunction(JavaLib.class.getMethod("importClass",LuanState.class,String.class),null) ); |
40 throw new RuntimeException(e); | 40 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) ); |
41 } | 41 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); |
42 } | 42 } catch(NoSuchMethodException e) { |
43 throw new RuntimeException(e); | |
44 } | |
45 return LuanFunction.EMPTY_RTN; | |
46 } | |
47 }; | |
43 | 48 |
44 private static final LuanTable mt = new LuanTable(); | 49 private static final LuanTable mt = new LuanTable(); |
45 static { | 50 static { |
46 add( mt, "__index", LuanState.class, Object.class, Object.class ); | 51 add( mt, "__index", LuanState.class, Object.class, Object.class ); |
47 add( mt, "__newindex", LuanState.class, Object.class, Object.class, Object.class ); | 52 add( mt, "__newindex", LuanState.class, Object.class, Object.class, Object.class ); |
292 } | 297 } |
293 return new Static(cls); | 298 return new Static(cls); |
294 } | 299 } |
295 | 300 |
296 public static void importClass(LuanState luan,String name) throws LuanException { | 301 public static void importClass(LuanState luan,String name) throws LuanException { |
297 luan.global().put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) ); | 302 luan.global.put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) ); |
298 } | 303 } |
299 | 304 |
300 static class AmbiguousJavaFunction extends LuanFunction { | 305 static class AmbiguousJavaFunction extends LuanFunction { |
301 private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>(); | 306 private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>(); |
302 | 307 |