class V8::Context

def self.eval(source)

def self.eval(source)
  new.eval(source)
end

def [](key)

def [](key)
  @scope[key]
end

def []=(key, value)

def []=(key, value)
  @scope[key] = value
end

def eval(javascript, filename = "<eval>", line = 1)

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 = JavascriptError.new(try)
      else
        result = script.Run()
        if try.HasCaught()
          err = JavascriptError.new(try)
        else
          value = To.ruby(result)
        end
      end
    end
  end
  raise err if err
  return value
end

def evaluate(*args)

def evaluate(*args)
  self.eval(*args)
end

def initialize(opts = {})

def initialize(opts = {})
  @native = C::Context::New(opts[:with])
  @scope = V8::Object.new(@native.Global(), @native)
  yield(self) if block_given?
end

def load(filename)

def load(filename)
  File.open(filename) do |file|
    evaluate file, filename, 1
  end      
end