elua: slightly less broken mixin behavior
authorDaniel Kolesa <d.kolesa@samsung.com>
Wed, 25 Feb 2015 12:09:16 +0000 (12:09 +0000)
committerDaniel Kolesa <d.kolesa@samsung.com>
Wed, 25 Feb 2015 12:09:16 +0000 (12:09 +0000)
src/bindings/luajit/eo.lua

index 4169b08..797aaf9 100644 (file)
@@ -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