class V8::Portal::Templates
def initialize(portal)
def initialize(portal) @portal = portal @constructors = {} @methods = {} @procs = {} @releases = {} end
def proxies
def proxies @portal.proxies end
def release(refs, id)
def release(refs, id) release = Release.new(@releases, refs, id) @releases[release] = true return release end
def to_constructor(ruby_class)
def to_constructor(ruby_class) class_id = ruby_class.object_id if constructor = @constructors[class_id] return constructor else constructor = @constructors[class_id] = ConstructorAdapter.new(self, class_id) ObjectSpace.define_finalizer(ruby_class, release(@constructors, class_id)) return constructor end end
def to_function(code)
def to_function(code) case code when Method, UnboundMethod if fn = @methods[code.to_s] return fn else function = @methods[code.to_s] = FunctionAdapter.new(@portal, code) #TODO: test this weak behavior function.template.MakeWeak(0, release(@methods, code.to_s)) return function end else if fn = @procs[code] return fn else function = @procs[code] = FunctionAdapter.new(@portal, code) #TODO: test this weak behavior function.template.MakeWeak(0, release(@procs, code)) return function end end end