class V8::Context
def self.eval(source)
def self.eval(source) new.eval(source) end
def self.open(opts = {}, &block)
def self.open(opts = {}, &block) new(opts).open(&block) end
def [](key)
def [](key) open do To.ruby(@native.Global().Get(key.to_s)) end end
def []=(key, value)
def []=(key, value) value.tap do open do @native.Global().tap do |scope| scope.Set(key.to_s, value) end end end end
def eval(javascript, sourcename = '<eval>', line = 1)
def eval(javascript, sourcename = '<eval>', line = 1) if IO === javascript || StringIO === javascript javascript = javascript.read() end @native.open do @native.eval(javascript).tap do |result| raise JavascriptError.new(result) if result.kind_of?(C::Message) return To.ruby(result) end end end
def evaluate(*args)
def evaluate(*args) self.eval(*args) end
def initialize(opts = {})
def initialize(opts = {}) @native = C::Context.new(opts[:with]) end
def load(filename)
def load(filename) File.open(filename) do |file| evaluate file, filename, 1 end end
def open(&block)
def open(&block) if block_given? unless @native == C::Context::GetCurrent() @native.open do block.call(self) end else block.call(self) end end end