class V8::Portal::Templates

Attributes

portal[R]

Public Class Methods

new(portal) click to toggle source
# File lib/v8/portal/templates.rb, line 8
def initialize(portal)
  @portal = portal
  @constructors = {}
  @methods = {}
  @procs = {}
  @releases = {}
end

Public Instance Methods

proxies() click to toggle source
# File lib/v8/portal/templates.rb, line 50
def proxies
  @portal.proxies
end
release(refs, id) click to toggle source
# File lib/v8/portal/templates.rb, line 54
def release(refs, id)
  release = Release.new(@releases, refs, id)
  @releases[release] = true
  return release
end
to_constructor(ruby_class) click to toggle source
# File lib/v8/portal/templates.rb, line 16
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
to_function(code) click to toggle source
# File lib/v8/portal/templates.rb, line 27
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