summaryrefslogtreecommitdiff
path: root/src/scripts
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2020-05-31 03:39:49 +0200
committerDaniel Kolesa <d.kolesa@samsung.com>2020-05-31 03:39:49 +0200
commitb953b99a6607535a860269d835b8447ea9497508 (patch)
treed3620dfb8b3053f08f2619a34dc36a3f1616c1d7 /src/scripts
parent38bf0be7d002c578392039b57f518ae5eb112ad9 (diff)
downloadefl-b953b99a6607535a860269d835b8447ea9497508.tar.gz
elua: fix object system on lua 5.2 onwards
This is a quick hacky fix, but it enables elua to work well with lua 5.2+. Notably Eolian bindings work now. Later this will be rewritten to use __gc directly on object instances, with a fallback for newproxy for 5.1/luajit.
Diffstat (limited to 'src/scripts')
-rw-r--r--src/scripts/elua/core/util.lua15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/scripts/elua/core/util.lua b/src/scripts/elua/core/util.lua
index 019a424e61..b184921b33 100644
--- a/src/scripts/elua/core/util.lua
+++ b/src/scripts/elua/core/util.lua
@@ -13,6 +13,17 @@ local M = {}
local getmetatable, setmetatable = getmetatable, setmetatable
local dgetmt = debug.getmetatable
+local newproxy = newproxy
+
+if not newproxy then
+ -- tables can have __gc from 5.2
+ newproxy = function(b)
+ if b then
+ return setmetatable({}, {})
+ end
+ return {}
+ end
+end
-- multiple inheritance index with depth-first search
local proto_lookup = function(protos, name)
@@ -98,8 +109,6 @@ M.Object = {
end
}
-local newproxy = newproxy
-
local robj_gc = function(px)
local dtor = px.__dtor
if dtor then dtor(px) end
@@ -108,7 +117,7 @@ end
M.Readonly_Object = M.Object:clone {}
M.Readonly_Object.__call = function(self, ...)
local r = newproxy(true)
- local rmt = getmetatable(r)
+ local rmt = dgetmt(r)
rmt.__index = self
rmt.__tostring = Object_MT.__tostring
rmt.__metatable = false