gxg-web-client/gxg/core/vm.rb
2021-11-16 08:58:51 -08:00

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