Mercurial Hosting > luan
diff core/src/luan/modules/JavaLuan.java @ 300:9fb523472035
add java() to control java access
git-svn-id: https://luan-java.googlecode.com/svn/trunk@301 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 16 Dec 2014 13:13:33 +0000 |
parents | a74559240b4f |
children | a6bf8ff720f8 |
line wrap: on
line diff
--- a/core/src/luan/modules/JavaLuan.java Tue Dec 16 06:24:49 2014 +0000 +++ b/core/src/luan/modules/JavaLuan.java Tue Dec 16 13:13:33 2014 +0000 @@ -27,12 +27,32 @@ public final class JavaLuan { + public static void java(LuanState luan) { + luan.currentEnvironment().setJava(); + } + + public static final LuanFunction javaFn; + static { + try { + javaFn = new LuanJavaFunction(JavaLuan.class.getMethod("java",LuanState.class),null); + } catch(NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + private static void checkJava(LuanState luan) throws LuanException { + if( !luan.currentEnvironment().hasJava() ) + throw luan.exception("Java isn't allowed"); + } + private static boolean isLoaded(LuanState luan) { // return PackageLuan.loaded(luan).get("luan:Java") != null; return true; } public static Object __index(LuanState luan,Object obj,Object key) throws LuanException { + if( !luan.currentEnvironment().hasJava() ) + return null; if( obj instanceof Static ) { if( key instanceof String ) { String name = (String)key; @@ -82,8 +102,6 @@ } else { List<Member> members = getMembers(cls,name); if( !members.isEmpty() ) { - if( name.equals("getClass") && !isLoaded(luan) ) - return null; // security return member(obj,members); } } @@ -121,6 +139,7 @@ } public static void __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException { + checkJava(luan); if( obj instanceof Static ) { if( key instanceof String ) { String name = (String)key; @@ -291,6 +310,7 @@ } public static Static load(LuanState luan,String name) throws LuanException { + checkJava(luan); @SuppressWarnings("unchecked") Map<String,Static> loaded = (Map<String,Static>)luan.registry().get("Java.loaded"); if( loaded == null ) { @@ -318,12 +338,8 @@ } return new Static(cls); } -/* - public static void importClass(LuanState luan,String name) throws LuanException { - luan.currentEnvironment().put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) ); - } -*/ - static class AmbiguousJavaFunction extends LuanFunction { + + private static class AmbiguousJavaFunction extends LuanFunction { private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>(); AmbiguousJavaFunction(List<LuanJavaFunction> fns) {