changeset 69:4bc1fc540265 default tip

update luan
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Oct 2025 20:45:39 -0600
parents 00520880ad02
children
files conf/Init.luan conf/serve_nabble.luan conf/setup.luan lib/luan.jar src/nabble/utils/LuanServlet.java src/nabble/utils/Utils.luan src/nabble/utils/luan/Http.luan src/nabble/utils/luan/HttpServicer.java src/nabble/view/lib/Recaptcha.java src/nabble/view/web/tools/shell.luan
diffstat 10 files changed, 70 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
diff -r 00520880ad02 -r 4bc1fc540265 conf/Init.luan
--- a/conf/Init.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/conf/Init.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,4 +1,4 @@
-java()
+require "java"
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local Io = require "luan:Io.luan"
diff -r 00520880ad02 -r 4bc1fc540265 conf/serve_nabble.luan
--- a/conf/serve_nabble.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/conf/serve_nabble.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,4 +1,4 @@
-java()
+require "java"
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
diff -r 00520880ad02 -r 4bc1fc540265 conf/setup.luan
--- a/conf/setup.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/conf/setup.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,4 +1,4 @@
-java()
+require "java"
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local LoggerFactory = require "java:org.slf4j.LoggerFactory"
diff -r 00520880ad02 -r 4bc1fc540265 lib/luan.jar
Binary file lib/luan.jar has changed
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/utils/LuanServlet.java
--- a/src/nabble/utils/LuanServlet.java	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/utils/LuanServlet.java	Sun Oct 05 20:45:39 2025 -0600
@@ -22,6 +22,7 @@
 		try {
 			luan.eval("require 'classpath:nabble/utils/init.luan'");
 		} catch(LuanException e) {
+			logger.error(e.getLuanStackTraceString());
 			throw new RuntimeException(e);
 		}
 		this.httpServicer = new HttpServicer(luan);
@@ -48,7 +49,7 @@
 			if( !httpServicer.service(request,response,uri) )
 				response.sendError(HttpServletResponse.SC_NOT_FOUND);
 		} catch(LuanException e) {
-//			throw new RuntimeException(e);
+			e.printStackTrace();
 			String err = e.getLuanStackTraceString();
 			logger.error(err);
 			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"<pre>"+err+"</pre>");
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/utils/Utils.luan
--- a/src/nabble/utils/Utils.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/utils/Utils.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,7 +1,6 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
-local try = Luan.try or error()
 local Io = require "luan:Io.luan"
 local uri = Io.uri or error()
 local String = require "luan:String.luan"
@@ -22,27 +21,24 @@
 end
 
 function Utils.ssh_is_ok(domain)
-	return try {
-		function()
-			local s = Utils.ssh(domain,"echo ssh-ok")
-			if trim(s) ~= "ssh-ok" then
-				error("check_ssh failed with: "..s)
-			end
-			return true
+	try
+		local s = Utils.ssh(domain,"echo ssh-ok")
+		if trim(s) ~= "ssh-ok" then
+			error("check_ssh failed with: "..s)
 		end
-		catch = function(e)
-			logger.error(e.get_message())
-			Utils.send_mail {
-				subject = domain.." ssh_is_ok failed"
-				body = ""
-			}
-			return false
-		end
-	}
+		return true
+	catch e
+		logger.error(e.get_message())
+		Utils.send_mail {
+			subject = domain.." ssh_is_ok failed"
+			body = ""
+		}
+		return false
+	end
 end
 
 
-java()
+require "java"
 local MailHome = require "java:fschmidt.util.mail.MailHome"
 local MailAddress = require "java:fschmidt.util.mail.MailAddress"
 local PlainTextContent = require "java:fschmidt.util.mail.PlainTextContent"
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/utils/luan/Http.luan
--- a/src/nabble/utils/luan/Http.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/utils/luan/Http.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,10 +1,15 @@
-java()
+require "java"
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
 local pairs = Luan.pairs or error()
 local set_metatable = Luan.set_metatable or error()
 local type = Luan.type or error()
+local get_local_cloned = Luan.get_local_cloned or error()
+local set_local_cloned = Luan.set_local_cloned or error()
+local get_local_only = Luan.get_local_only or error()
+local set_local_only = Luan.set_local_only or error()
+local raw_set = Luan.raw_set or error()
 local Io = require "luan:Io.luan"
 local Html = require "luan:Html.luan"
 local url_encode = Html.url_encode or error()
@@ -12,13 +17,33 @@
 local clear = Table.clear or error()
 local Package = require "luan:Package.luan"
 local String = require "luan:String.luan"
-local matches = String.matches or error()
+local regex = String.regex or error()
 local Boot = require "luan:Boot.luan"
 local HttpServicer = require "java:nabble.utils.luan.HttpServicer"
 local IoLuan = require "java:luan.modules.IoLuan"
 
 
 local Http = {}
+local mt = {}
+function mt.__index(tbl,key)
+	if key=="error_priority" or key=="not_found_handler" then
+		return get_local_cloned(tbl,key)
+	elseif key=="request" or key=="response" then
+		return get_local_only(tbl,key)
+	else
+		return nil
+	end
+end
+function mt.__new_index(tbl,key,value)
+	if key=="error_priority" or key=="not_found_handler" then
+		set_local_cloned(tbl,key,value)
+	elseif key=="request" or key=="response" then
+		set_local_only(tbl,key,value)
+	else
+		raw_set(tbl,key,value)
+	end
+end
+set_metatable(Http,mt)
 
 Http.version = "jetty"
 
@@ -28,7 +53,7 @@
 
 local sent_error_metatable = { __index=sent_error, __new_index=sent_error }
 
-function Http.sent_headers(headers)
+local function sent_headers(headers)
 	clear(headers)
 	set_metatable(headers,sent_error_metatable)
 end
@@ -122,7 +147,7 @@
 
 		function this.set()
 			HttpServicer.setResponse(this,this.java)
-			Http.sent_headers(this.headers)
+			sent_headers(this.headers)
 		end
 
 		function this.text_writer()
@@ -151,7 +176,7 @@
 
 function Http.uncache_site()
 	for k in pairs(Table.copy(Package.loaded)) do
-		if matches(k,"^site:") then
+		if regex("^site:").matches(k) then
 			Package.loaded[k] = nil
 		end
 	end
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/utils/luan/HttpServicer.java
--- a/src/nabble/utils/luan/HttpServicer.java	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/utils/luan/HttpServicer.java	Sun Oct 05 20:45:39 2025 -0600
@@ -24,7 +24,6 @@
 import luan.LuanFunction;
 import luan.LuanException;
 import luan.LuanTable;
-import luan.LuanCloner;
 import luan.modules.PackageLuan;
 import luan.modules.IoLuan;
 import luan.modules.TableLuan;
@@ -47,24 +46,22 @@
 		LuanFunction fn;
 		Luan luan;
 		synchronized(this) {
-			enableLoad("luan:http/Http.luan",modName);
-			LuanTable module = (LuanTable)PackageLuan.require(currentLuan,"luan:http/Http.luan");
-			Object mod = PackageLuan.load(currentLuan,modName);
+			LuanTable module = (LuanTable)currentLuan.require("luan:http/Http.luan");
+			Object mod = PackageLuan.load(currentLuan,modName,null);
 			if( mod.equals(Boolean.FALSE) )
 				return false;
 			if( !(mod instanceof LuanFunction) )
-				throw new LuanException( "module '"+modName+"' must return a function" );
-			LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
-			luan = (Luan)cloner.clone(currentLuan);
-			fn = (LuanFunction)cloner.get(mod);
+				throw new LuanException( "module '"+modName+"' must return a function" );
+			luan = new Luan(currentLuan);
+			fn = (LuanFunction)mod;
 		}
 
-		LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
+		LuanTable module = (LuanTable)luan.require("luan:http/Http.luan");
 
 		// request
 		LuanFunction newRequestFn = (LuanFunction)module.rawGet("new_request");
-		LuanTable requestTbl = (LuanTable)newRequestFn.call();
-		module.rawPut("request",requestTbl);
+		LuanTable requestTbl = (LuanTable)newRequestFn.call(luan);
+		module.put(luan,"request",requestTbl);
 		requestTbl.rawPut("java",request);
 		requestTbl.rawPut("method",request.getMethod());
 		requestTbl.rawPut("path",request.getRequestURI());
@@ -82,7 +79,7 @@
 			int size = values.size();
 			if(size==0) throw new RuntimeException();
 			key = key.toLowerCase();
-			Object value = size==1 ? values.get(0) : new LuanTable(luan,values);
+			Object value = size==1 ? values.get(0) : new LuanTable(values);
 			headersTbl.rawPut(key,value);
 		}
 
@@ -90,7 +87,7 @@
 		for( Object obj : request.getParameterMap().entrySet() ) {
 			Map.Entry entry = (Map.Entry)obj;
 			String[] a = (String[])entry.getValue();
-			Object value = a.length==1 ? a[0] : new LuanTable(luan,Arrays.asList(a));
+			Object value = a.length==1 ? a[0] : new LuanTable(Arrays.asList(a));
 			parametersTbl.rawPut(entry.getKey(),value);
 		}
 		LuanTable cookieTbl = (LuanTable)requestTbl.rawGet("cookies");
@@ -100,13 +97,13 @@
 
 
 		// response
-		LuanTable responseTbl = new LuanTable(luan);
+		LuanTable responseTbl = new LuanTable();
 		responseTbl.rawPut("java",response);
 		LuanFunction newResponseFn = (LuanFunction)module.rawGet("new_response");
-		newResponseFn.call( responseTbl );
-		module.rawPut("response",responseTbl);
+		newResponseFn.call( luan, responseTbl );
+		module.put(luan,"response",responseTbl);
 
-		fn.call();
+		fn.call(luan);
 		return true;
 	}
 
@@ -141,17 +138,6 @@
 		throw new IllegalArgumentException("value must be string or integer for headers table");
 	}
 
-	private void enableLoad(String... mods) throws LuanException {
-		LuanTable loaded = PackageLuan.loaded(currentLuan);
-		for( String mod : mods ) {
-			if( loaded.rawGet(mod) == null ) {
-				LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
-				currentLuan = (Luan)cloner.clone(currentLuan);
-				break;
-			}
-		}
-	}
-
 
 
 	// static utils
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/view/lib/Recaptcha.java
--- a/src/nabble/view/lib/Recaptcha.java	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/view/lib/Recaptcha.java	Sun Oct 05 20:45:39 2025 -0600
@@ -5,8 +5,8 @@
 import java.net.UnknownHostException;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
-import luan.lib.json.JsonParser;
-import luan.lib.parser.ParseException;
+import goodjava.json.JsonParser;
+import goodjava.parser.ParseException;
 import fschmidt.util.java.IoUtils;
 import nabble.model.ModelException;
 import nabble.view.lib.Jtp;
diff -r 00520880ad02 -r 4bc1fc540265 src/nabble/view/web/tools/shell.luan
--- a/src/nabble/view/web/tools/shell.luan	Sun Oct 05 17:24:15 2025 -0600
+++ b/src/nabble/view/web/tools/shell.luan	Sun Oct 05 20:45:39 2025 -0600
@@ -1,14 +1,14 @@
 local init = [[
-java()
+require "java"
 ModelHome = require "java:nabble.model.ModelHome"
 ]]
 
-java()
+require "java"
 local JavaLuan = require "java:luan.modules.JavaLuan"
 JavaLuan.privateAccess = true
 
-local shell = require "luan:http/tools/Shell.luan"
+local Shell = require "luan:http/tools/Shell.luan"
 local Luan = require "luan:Luan.luan"
 local load = Luan.load
-load(init,"<nabble>",shell.env)()
-return shell.respond
+load(init,"<nabble>",Shell.env)()
+return Shell.respond