[ create a new paste ] login | about

Link: http://codepad.org/ivDxRNZx    [ raw code | output | fork ]

Lua, pasted on May 13:
local function np ()
	local p = newproxy(true)
	debug.getmetatable(p).__gc = function () print "panel collected" end
	return p
end

function class(name)
  local newclass={}
  _G[name]=newclass
  newclass.__members={}
  function newclass.define(class,members)
    for k,v in pairs(members) do
      class.__members[k]=v
    end
  end
  function newclass.extends(class,base)
    class.super=base
    for k,v in pairs(base.__members) do
      class.__members[k]=v
    end
    return setmetatable(class,{__index=base,__call=class.define})
  end
  function newclass.new(class,...)
    local object={}
    for k,v in pairs(class.__members) do
      object[k]=v
    end
    setmetatable(object,{__index=class})
    if object.initialize then
      object:initialize(...)
    end
    return object
  end
  return setmetatable(newclass,{__call=newclass.define})
end

-----

class "Entity" { }

class "Panel": extends(Entity) { }
function Panel:initialize (ud) 
	self.ud = ud
end

-----

local m = { }
for i = 1, 5 do
	m[i] = Panel:new(np())
end

collectgarbage "collect" -- should not collect them
print("before:", collectgarbage "count")

m = nil

collectgarbage "collect" -- should collect them
print("after:", collectgarbage "count")

print "END"


Output:
1
2
3
4
5
6
7
8
before:	22.88671875
panel collected
panel collected
panel collected
panel collected
panel collected
after:	22.17578125
END


Create a new paste based on this one


Comments: