Mercurial Hosting > luan
comparison src/luan/lib/JavaLib.java @ 112:f5af13062b10
fix previous rev
git-svn-id: https://luan-java.googlecode.com/svn/trunk@113 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 23 May 2014 22:52:39 +0000 |
parents | 3c404a296995 |
children | f1bf2890d80f |
comparison
equal
deleted
inserted
replaced
111:2428ecfed375 | 112:f5af13062b10 |
---|---|
28 public final class JavaLib { | 28 public final class JavaLib { |
29 | 29 |
30 public static final String NAME = "Java"; | 30 public static final String NAME = "Java"; |
31 | 31 |
32 public static final LuanFunction LOADER = new LuanFunction() { | 32 public static final LuanFunction LOADER = new LuanFunction() { |
33 @Override public Object[] call(LuanState luan,Object[] args) { | 33 @Override public Object call(LuanState luan,Object[] args) { |
34 luan.addMetatableGetter(mg); | 34 luan.addMetatableGetter(mg); |
35 LuanTable module = new LuanTable(); | 35 LuanTable module = new LuanTable(); |
36 LuanTable global = luan.global(); | 36 LuanTable global = luan.global(); |
37 try { | 37 try { |
38 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) ); | 38 module.put( "class", new LuanJavaFunction(JavaLib.class.getMethod("getClass",LuanState.class,String.class),null) ); |
39 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); | 39 add( module, "proxy", LuanState.class, Static.class, LuanTable.class, Object.class ); |
40 } catch(NoSuchMethodException e) { | 40 } catch(NoSuchMethodException e) { |
41 throw new RuntimeException(e); | 41 throw new RuntimeException(e); |
42 } | 42 } |
43 luan.searchers().add(javaSearcher); | 43 luan.searchers().add(javaSearcher); |
44 return new Object[]{module}; | 44 return module; |
45 } | 45 } |
46 }; | 46 }; |
47 | 47 |
48 public static final LuanFunction javaSearcher = new LuanFunction() { | 48 public static final LuanFunction javaSearcher = new LuanFunction() { |
49 @Override public Object[] call(LuanState luan,Object[] args) throws LuanException { | 49 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
50 String modName = (String)args[0]; | 50 String modName = (String)args[0]; |
51 final Static s = JavaLib.getClass(luan,modName); | 51 final Static s = JavaLib.getClass(luan,modName); |
52 if( s==null ) | 52 if( s==null ) |
53 return LuanFunction.EMPTY; | 53 return null; |
54 LuanFunction loader = new LuanFunction() { | 54 LuanFunction loader = new LuanFunction() { |
55 @Override public Object[] call(LuanState luan,Object[] args) { | 55 @Override public Object call(LuanState luan,Object[] args) { |
56 return new Object[]{s}; | 56 return s; |
57 } | 57 } |
58 }; | 58 }; |
59 return new Object[]{loader}; | 59 return loader; |
60 } | 60 } |
61 }; | 61 }; |
62 | 62 |
63 private static void add(LuanTable t,String method,Class<?>... parameterTypes) { | 63 private static void add(LuanTable t,String method,Class<?>... parameterTypes) { |
64 try { | 64 try { |
366 } | 366 } |
367 list.add(fn); | 367 list.add(fn); |
368 } | 368 } |
369 } | 369 } |
370 | 370 |
371 @Override public Object[] call(LuanState luan,Object[] args) throws LuanException { | 371 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
372 for( LuanJavaFunction fn : fnMap.get(args.length) ) { | 372 for( LuanJavaFunction fn : fnMap.get(args.length) ) { |
373 try { | 373 try { |
374 return fn.rawCall(luan,args); | 374 return fn.rawCall(luan,args); |
375 } catch(IllegalArgumentException e) {} | 375 } catch(IllegalArgumentException e) {} |
376 } | 376 } |