Class: Johnson::SpiderMonkey::Runtime

Inherits:
Runtime
  • Object
show all
Defined in:
lib/johnson/spidermonkey/runtime.rb

Overview

native

Constant Summary collapse

CONTEXT_MAP_KEY =
:johnson_context_map

Constants inherited from Runtime

Runtime::PRELUDE, Runtime::PRELUDE_PATH

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Runtime

#[], #[]=, #delegate, #evaluate, #global, #load, new, #require

Constructor Details

#initialize(options = {}) ⇒ Runtime

Returns a new instance of Runtime.



11
12
13
14
15
16
17
# File 'lib/johnson/spidermonkey/runtime.rb', line 11

def initialize(options={})
  @debugger = nil
  @gcthings = {}
  @traps = []
  initialize_native(options)
  super()
end

Instance Attribute Details

#trapsObject (readonly)

Returns the value of attribute traps.



10
11
12
# File 'lib/johnson/spidermonkey/runtime.rb', line 10

def traps
  @traps
end

Class Method Details

.parse_io(*args) ⇒ Object



57
58
59
# File 'lib/johnson/spidermonkey/runtime.rb', line 57

def parse_io *args
  Johnson::SpiderMonkey::ImmutableNode.parse_io( *args )
end

.raise_js_exception(jsex) ⇒ Object

Raises:



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/johnson/spidermonkey/runtime.rb', line 61

def raise_js_exception(jsex)
  raise jsex if Exception === jsex
  raise Johnson::Error.new(jsex.to_s) unless Johnson::SpiderMonkey::RubyLandProxy === jsex

  stack = jsex.stack rescue nil

  message = jsex['message'] || jsex.to_s
  at = "(#{jsex['fileName']}):#{jsex['lineNumber']}"
  ex = Johnson::Error.new("#{message} at #{at}")
  if stack
    js_caller = stack.split("\n").find_all { |x| x != '@:0' }
    ex.set_backtrace(js_caller + caller)
  else
    ex.set_backtrace(caller)
  end

  raise ex
end

Instance Method Details

#add_gcthing(thing) ⇒ Object

called from js_land_proxy.c:make_js_land_proxy



20
21
22
# File 'lib/johnson/spidermonkey/runtime.rb', line 20

def add_gcthing(thing)
  @gcthings[thing.object_id] = thing
end

#compile(script, filename = nil, linenum = nil) ⇒ Object

Compile script with filename and linenum



49
50
51
52
53
# File 'lib/johnson/spidermonkey/runtime.rb', line 49

def compile(script, filename=nil, linenum=nil)
  filename ||= 'none'
  linenum  ||= 1
  native_compile(script, filename, linenum)
end

#current_contextObject



33
34
35
36
# File 'lib/johnson/spidermonkey/runtime.rb', line 33

def current_context
  contexts = (Thread.current[CONTEXT_MAP_KEY] ||= {})
  contexts[self.object_id] ||= Context.new(self)
end

#debugger?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/johnson/spidermonkey/runtime.rb', line 29

def debugger?
  not @debugger.nil?
end

#evaluate_compiled_script(script) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/johnson/spidermonkey/runtime.rb', line 39

def evaluate_compiled_script script
  evaluate_compiled_script_without_clearing_traps(script)
ensure
  @traps.each do |trap_tuple|
    clear_trap(*trap_tuple)
  end
end

#evaluate_compiled_script_without_clearing_trapsObject



38
# File 'lib/johnson/spidermonkey/runtime.rb', line 38

alias :evaluate_compiled_script_without_clearing_traps :evaluate_compiled_script

#remove_gcthing(object_id) ⇒ Object

called from js_land_proxy.c:finalize



25
26
27
# File 'lib/johnson/spidermonkey/runtime.rb', line 25

def remove_gcthing(object_id)
  @gcthings.delete(object_id) if defined? @gcthings
end

#versionObject



4
5
6
# File 'lib/johnson/spidermonkey/runtime.rb', line 4

def version
  SpiderMonkey::VERSION
end