classdb = table.coerce(classdb) -- classdb.create: creates a new class database. function classdb.create() return {} end -- Given a class database, removes all the functions that have -- been inserted into it, but keeps the class and action tables. function classdb.reset(db) for name,maybeclass in pairs(db) do local class = table.coerce(maybeclass) local action = table.coerce(rawget(class, "action")) table.rawclear(class) table.rawclear(action) rawset(db, name, class) class.action = action class.__index = class class.__class = name end end -- Given a class_db, makes an accessor that fetches classes -- from that class db. function classdb.accessor(db) return function(name) local class = rawget(db, name) if type(class) ~= "table" then class = {} rawset(db, name, class) class.action = {} class.__index = class class.__class = name end return class end end -- Make a global class database to use for the super. classdb.database = {} class = classdb.accessor(classdb.database)