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