local function new() local x = { level = 1, new = new } local m = {} setmetatable(x, m) m.__eq = function(p1,p2) if getmetatable(p1) == getmetatable(p2) then return true end end m.__index = function(inst, key) local lvl = rawget(inst, "level") if key == "level" then return lvl else return setmetatable({ level = lvl + 1 }, m) end end m.__tostring = function(inst) return ("RECURSION "):rep(rawget(inst, "level")) end return x end return new()