Sha256: c51fded430525e0e2ca7414f0fb357d0da01759c8e931cbf8f6c70d35e1eb56e
Contents?: true
Size: 1.9 KB
Versions: 4
Compression:
Stored size: 1.9 KB
Contents
require 'stringio' module V8 class Context attr_reader :native, :scope, :access def initialize(opts = {}) @access = Access.new @to = Portal.new(self, @access) @native = opts[:with] ? C::Context::New(@to.rubytemplate) : C::Context::New() @native.enter do @scope = @to.rb(@native.Global()) @native.Global().SetHiddenValue(C::String::New("TheRubyRacer::RubyObject"), C::External::New(opts[:with])) if opts[:with] end yield(self) if block_given? end def eval(javascript, filename = "<eval>", line = 1) if IO === javascript || StringIO === javascript javascript = javascript.read() end err = nil value = nil C::TryCatch.try do |try| @native.enter do script = C::Script::Compile(@to.v8(javascript.to_s), @to.v8(filename.to_s)) if try.HasCaught() err = JSError.new(try, @to) else result = script.Run() if try.HasCaught() err = JSError.new(try, @to) else value = @to.rb(result) end end end end raise err if err return value end def evaluate(*args) self.eval(*args) end def load(filename) File.open(filename) do |file| evaluate file, filename, 1 end end def [](key) @scope[key] end def []=(key, value) @scope[key] = value end def self.eval(source) new.eval(source) end def V8.eval(*args) V8::Context.eval(*args) end end module C class Context def enter if block_given? if IsEntered() yield(self) else Enter() begin yield(self) ensure Exit() end end end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
therubyracer-0.8.0 | lib/v8/context.rb |
therubyracer-0.8.0.pre3 | lib/v8/context.rb |
therubyracer-0.8.0.pre2 | lib/v8/context.rb |
therubyracer-0.8.0.pre | lib/v8/context.rb |