30log icon indicating copy to clipboard operation
30log copied to clipboard

Subclasse "capture" super's __subclasses entry

Open cpeosphoros opened this issue 7 years ago • 0 comments

Title says it all. Code says it better than words, so, here is a code demonstration (with the irrelevant entries stripped from the tables):

local Class = require "30log.30log-clean"
local Base  = Class("Base")
-- class 'Base' (table: 0x23656b0) * {
--   __subclasses : table: 0x2365980 * {
--                    },
-- }
local Sub1 = Base:extend("Sub1")
-- class 'Base' (table: 0x23656b0) * {
--   __subclasses : table: 0x2365980 * {
--                       class 'Sub1' (table: 0x2367ee0) : true,
--                    },
-- }
-- class 'Sub1' (table: 0x2367ee0) * {
--   super : class 'Base' (table: 0x23656b0) * {
--                __subclasses : table: 0x2365980 * {
--                                    class 'Sub1' (table: 0x2367ee0) : true,
--                                 },
--             },
--   __subclasses : table: 0x23680c0 * {
--                       class 'Sub1' (table: 0x2367ee0) : true,
--                    },
-- }
local Sub2 = Base:extend("Sub2")
-- class 'Base' (table: 0x23656b0) * {
--   __subclasses : table: 0x2365980 * {
--                       class 'Sub1' (table: 0x2367ee0) : true,
--                       class 'Sub2' (table: 0x236a490) : true,
--                    },
-- }
-- class 'Sub1' (table: 0x2367ee0) * {
--   super : class 'Base' (table: 0x23656b0) * {
--                __subclasses : table: 0x2365980 * {
--                                    class 'Sub1' (table: 0x2367ee0) : true,
--                                    class 'Sub2' (table: 0x236a490) : true,
--                                 },
--             },
--   __subclasses : table: 0x23680c0 * {
--                       class 'Sub1' (table: 0x2367ee0) : true,
--                    },
-- }
-- class 'Sub2' (table: 0x236a490) * {
--   super : class 'Base' (table: 0x23656b0) * {
--                __subclasses : table: 0x2365980 * {
--                                    class 'Sub1' (table: 0x2367ee0) : true,
--                                    class 'Sub2' (table: 0x236a490) : true,
--                                 },
--             },
--   __subclasses : table: 0x236af80 * {
--                       class 'Sub1' (table: 0x2367ee0) : true,
--                       class 'Sub2' (table: 0x236a490) : true,
--                    },
-- }
local SubSub2 = Sub2:extend("SubSub2")
-- class 'Base' (table: 0x17614c0) * {
--   __subclasses : table: 0x1761790 * {
--                       class 'Sub1' (table: 0x1761a10) : true,
--                       class 'Sub2' (table: 0x1762140) : true,
--                    },
-- }
-- class 'Sub2' (table: 0x1762140) * {
--   __subclasses : table: 0x1762320 * {
--                       class 'Sub2' (table: 0x1762140) : true,
--                       class 'SubSub2' (table: 0x1762870) : true,
--                       class 'Sub1' (table: 0x1761a10) : true,
--                    },
--   super : class 'Base' (table: 0x17614c0) * {
--                __subclasses : table: 0x1761790 * {
--                                    class 'Sub1' (table: 0x1761a10) : true,
--                                    class 'Sub2' (table: 0x1762140) : true,
--                                 },
--             },
-- }
-- class 'SubSub2' (table: 0x1762870) * {
--   super : class 'Sub2' (table: 0x1762140) * {
--                __subclasses : table: 0x1762320 * {
--                                    class 'Sub2' (table: 0x1762140) : true,
--                                    class 'SubSub2' (table: 0x1762870) : true,
--                                    class 'Sub1' (table: 0x1761a10) : true,
--                                 },
--                super : class 'Base' (table: 0x17614c0) * {
--                             __subclasses : table: 0x1761790 * {
--                                                 class 'Sub1' (table: 0x1761a10) : true,
--                                                 class 'Sub2' (table: 0x1762140) : true,
--                                              },
--                          },
--             },
--   __subclasses : table: 0x1762a10 * {
--                       class 'Sub2' (table: 0x1762140) : true,
--                       class 'SubSub2' (table: 0x1762870) : true,
--                       class 'Sub1' (table: 0x1761a10) : true,
--                    },
-- }

cpeosphoros avatar Jul 18 '17 14:07 cpeosphoros