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