From f0bf599435fead1985254a3f8ca18d0748b03e6e Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 25 Feb 2015 12:09:16 +0000 Subject: [PATCH] elua: slightly less broken mixin behavior --- src/bindings/luajit/eo.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bindings/luajit/eo.lua b/src/bindings/luajit/eo.lua index 4169b08..797aaf9 100644 --- a/src/bindings/luajit/eo.lua +++ b/src/bindings/luajit/eo.lua @@ -200,13 +200,13 @@ end local mixin_tbl = function(cl, mixin, field) local mxt = mixin[field] if mxt then - local clt = cl[field] + local clt = rawget(cl, field) if not clt then - cl[field] = mxt - else - for k, v in pairs(mxt) do clt[k] = v end + -- will always succeed, even if it means deep lookups + clt = cl.__proto[field]:clone() + rawset(cl, field, clt) end - mixin[field] = nil + for k, v in pairs(mxt) do clt[k] = v end end end -- 2.7.4