diff options
author | Daniel Kolesa <d.kolesa@samsung.com> | 2020-05-31 03:39:49 +0200 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@samsung.com> | 2020-05-31 03:39:49 +0200 |
commit | b953b99a6607535a860269d835b8447ea9497508 (patch) | |
tree | d3620dfb8b3053f08f2619a34dc36a3f1616c1d7 /src/scripts | |
parent | 38bf0be7d002c578392039b57f518ae5eb112ad9 (diff) | |
download | efl-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.lua | 15 |
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 |