-- currently a class is a table T with T.__index = T -- then to make an instance of this class, we do setmetatable(instance,T) -- this should be fine for anything we wish to do. it is possible we will eventually -- split this into two separate tables though, perhaps? i don't see why we would ever -- do this though. local function class() local T = {} T.__index = T return T end local function extend(Base) local T = {} T.__index = T for k,v in pairs(Base) do if k:sub(1,2) == "__" and k~="__index" then T[k]=v end end setmetatable(T,{__index=Base}) return T end return setmetatable({ class=class, extend=extend },{__call=class})