mirror of
https://github.com/mistergibson/gxg-web-client.git
synced 2026-08-15 11:34:29 -07:00
34 lines
1.1 KiB
Ruby
34 lines
1.1 KiB
Ruby
class Rubinius::VM
|
|
# Get an Array of Rubinius::Location objects representing the current
|
|
# call stack. +frames_to_skip+ says how many initial frames to ignore.
|
|
# If +include_vars+ is set, then the Location objects also include a
|
|
# Rubinius::VariableScope object that can be used to access the frames
|
|
# running information like locals, self, etc.
|
|
#
|
|
def self.backtrace(frames_to_skip, *args)
|
|
Rubinius.invoke_primitive :vm_backtrace, Integer(frames_to_skip) + 1
|
|
end
|
|
|
|
def self.stats
|
|
Rubinius.primitive :vm_stats
|
|
raise PrimitiveFailure, "Rubinius::VM.stats primitive failed"
|
|
end
|
|
|
|
def self.load_library(path, name)
|
|
Rubinius.primitive :load_library
|
|
raise PrimitiveFailure, "Rubinius::VM.load_library primitive failed"
|
|
end
|
|
|
|
def self.coerce_to_array(object)
|
|
array = object.respond_to?(:to_a) ? object.to_a : [object]
|
|
raise(TypeError, "`to_a' did not return Array") unless array.is_a?(Array)
|
|
array
|
|
end
|
|
|
|
# Semantics of this are very important. ret MUST be returned.
|
|
def self.perform_hook(obj, meth, arg, ret)
|
|
# The VM already verified the method exists
|
|
obj.__send__(meth, arg)
|
|
return ret
|
|
end
|
|
end
|