Mercurial Hosting > luan
changeset 1852:be88e04bcae0
add luan.rootRegistry
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 23 Feb 2025 11:10:31 -0700 |
parents | 9d093f14e240 |
children | b16d0991ae51 |
files | src/luan/Luan.java src/luan/modules/PackageLuan.java src/luan/modules/ThreadLuan.java src/luan/modules/http/LuanHandler.java src/luan/modules/logging/LuanLogger.java |
diffstat | 5 files changed, 26 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/Luan.java Sat Feb 22 23:38:40 2025 -0700 +++ b/src/luan/Luan.java Sun Feb 23 11:10:31 2025 -0700 @@ -29,18 +29,21 @@ private static final FileClassLoader emptyClassLoader = FileClassLoader.getFileClassLoader( Collections.emptyList() ); private final List<LuanClosure> stack = new ArrayList<LuanClosure>(); - private final Map registry; + public final Map registry; + public final Map rootRegistry; private final Map localOnly = new HashMap(); private FileClassLoader classLoader; public Luan() { this.registry = new HashMap(); + this.rootRegistry = new HashMap(); this.classLoader = emptyClassLoader; } public Luan(Luan luan) { LuanMutable.makeImmutable(luan.registry); this.registry = clone(luan.registry); + this.rootRegistry = luan.rootRegistry; this.classLoader = luan.classLoader; } @@ -165,10 +168,6 @@ stack.remove(stack.size()-1); } - public Map registry() { - return registry; - } - public Object eval(String cmd,Object... args) throws LuanException { return load(cmd,"eval",false).call(this,args); } @@ -473,13 +472,13 @@ } private static void check(Luan luan,int i,String op,Object... args) throws LuanException { - Security s = (Security)luan.registry().get(SECURITY_KEY); + Security s = (Security)luan.registry.get(SECURITY_KEY); if( s!=null ) s.check(luan,luan.peek(i),op,args); } public static Security setSecurity(Luan luan,Security s) { - return (Security)luan.registry().put(SECURITY_KEY,s); + return (Security)luan.registry.put(SECURITY_KEY,s); }
--- a/src/luan/modules/PackageLuan.java Sat Feb 22 23:38:40 2025 -0700 +++ b/src/luan/modules/PackageLuan.java Sun Feb 23 11:10:31 2025 -0700 @@ -19,23 +19,23 @@ public final class PackageLuan { public static LuanFunction requireFn(Luan luan) { - LuanFunction fn = (LuanFunction)luan.registry().get("Package.require"); + LuanFunction fn = (LuanFunction)luan.registry.get("Package.require"); if( fn == null ) { try { fn = new LuanJavaFunction(PackageLuan.class.getMethod("require",Luan.class,String.class,LuanTable.class),null); } catch(NoSuchMethodException e) { throw new RuntimeException(e); } - luan.registry().put("Package.require",fn); + luan.registry.put("Package.require",fn); } return fn; } public static Map loaded(Luan luan) { - Map map = (Map)luan.registry().get("Package.loaded"); + Map map = (Map)luan.registry.get("Package.loaded"); if( map == null ) { map = new HashMap(); - luan.registry().put("Package.loaded",map); + luan.registry.put("Package.loaded",map); } return map; }
--- a/src/luan/modules/ThreadLuan.java Sat Feb 22 23:38:40 2025 -0700 +++ b/src/luan/modules/ThreadLuan.java Sun Feb 23 11:10:31 2025 -0700 @@ -107,7 +107,7 @@ scheduler.schedule(r,0L,TimeUnit.MILLISECONDS); return; } - Closeables cs = (Closeables)luan.registry().get(CLOSEABLES); + Closeables cs = (Closeables)luan.registry.get(CLOSEABLES); if( cs != null ) { Closeable cl = new Closeable() { public void close() { @@ -151,9 +151,7 @@ } } - private static Map<String,Callable> callableMap = new HashMap<String,Callable>(); - - private static void sweep() { + private static void sweep(Map<String,Callable> callableMap) { long now = System.currentTimeMillis(); for( Iterator<Callable> iter = callableMap.values().iterator(); iter.hasNext(); ) { Callable callable = iter.next(); @@ -163,27 +161,25 @@ } public static synchronized Callable globalCallable(Luan luan,final String name,LuanFunction initFn,long timeout) throws LuanException { + Map<String,Callable> callableMap = (Map<String,Callable>)luan.rootRegistry.get("Luan.callableMap"); + if( callableMap == null ) { + callableMap = new HashMap<String,Callable>(); + luan.rootRegistry.put("Luan.callableMap",callableMap); + } Callable callable = callableMap.get(name); if( callable == null ) { - sweep(); + sweep(callableMap); callable = new Callable(initFn); callableMap.put(name,callable); - Closeables cs = (Closeables)luan.registry().get(CLOSEABLES); - if( cs != null ) { - Closeable cl = new Closeable() { - public void close() { - removeGlobalCallable(name); - } - }; - cs.addCloseable(cl); - } } callable.expires = System.currentTimeMillis() + timeout; return callable; } - public static synchronized void removeGlobalCallable(String name) { - callableMap.remove(name); + public static synchronized void removeGlobalCallable(Luan luan,String name) { + Map<String,Callable> callableMap = (Map<String,Callable>)luan.rootRegistry.get("Luan.callableMap"); + if( callableMap != null ) + callableMap.remove(name); }
--- a/src/luan/modules/http/LuanHandler.java Sat Feb 22 23:38:40 2025 -0700 +++ b/src/luan/modules/http/LuanHandler.java Sun Feb 23 11:10:31 2025 -0700 @@ -74,9 +74,9 @@ } catch(LuanException e) { throw new RuntimeException(e); } - if( luanInit.registry().get(ThreadLuan.CLOSEABLES) != null ) + if( luanInit.registry.get(ThreadLuan.CLOSEABLES) != null ) throw new RuntimeException(ThreadLuan.CLOSEABLES+" already set"); - luanInit.registry().put(ThreadLuan.CLOSEABLES,fns); + luanInit.registry.put(ThreadLuan.CLOSEABLES,fns); if( domain != null ) logger.warn("new "+domain); newLuan();
--- a/src/luan/modules/logging/LuanLogger.java Sat Feb 22 23:38:40 2025 -0700 +++ b/src/luan/modules/logging/LuanLogger.java Sun Feb 23 11:10:31 2025 -0700 @@ -55,7 +55,7 @@ ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender; Appender appender; synchronized(luan) { - appender = (Appender)luan.registry().get(KEY); + appender = (Appender)luan.registry.get(KEY); } if( appender == null ) appender = tla.defaultAppender; @@ -79,7 +79,7 @@ if( globalAppender instanceof ThreadLocalAppender ) { ThreadLocalAppender tla = (ThreadLocalAppender)globalAppender; if( tla.threadLocal.get() != null ) { - luan.registry().put(KEY,appender); + luan.registry.put(KEY,appender); tla.threadLocal.set(appender); } else { tla.defaultAppender = appender;