diff src/luan/modules/Boot.luan @ 1578:c922446f53aa

immutable threading
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 08 Feb 2021 14:16:19 -0700
parents 81288d8b20a2
children 2975c932864d
line wrap: on
line diff
--- a/src/luan/modules/Boot.luan	Sun Jan 31 16:04:39 2021 -0700
+++ b/src/luan/modules/Boot.luan	Mon Feb 08 14:16:19 2021 -0700
@@ -14,6 +14,10 @@
 local LuanUrl = require "java:luan.modules.url.LuanUrl"
 local LuanJava = require "java:luan.Luan"
 local LuanTable = require "java:luan.LuanTable"
+local get_local_cloned = BasicLuan.get_local_cloned
+local set_local_cloned = BasicLuan.set_local_cloned
+local is_immutable = BasicLuan.is_immutable
+local raw_set = BasicLuan.raw_set
 
 
 local Boot = {}
@@ -38,6 +42,19 @@
 Boot.no_security = no_security
 
 
+local local_metatable = {
+	__index = get_local_cloned
+}
+function local_metatable.__new_index(tbl,key,value)
+	if is_immutable(tbl) then
+		set_local_cloned(tbl,key,value)
+	else
+		raw_set(tbl,key,value)
+	end
+end
+Boot.local_metatable = local_metatable
+
+
 local function new_LuanIn(io)
 	local this = {}
 	this.java = io
@@ -87,6 +104,7 @@
 end
 
 local schemes = {}
+set_metatable(schemes,local_metatable)
 --LuanTable.setSecurity(schemes,"schemes")
 
 function schemes.null(path)