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

44 lines
1.3 KiB
Ruby

##
# Parent class of everything that can live in a MethodTable.
#
# When calling an Executable, first the primitive slot is checked and executed
# if it exists. If execution of the primitive is successful, the value is put
# on the stack, and execution of the method is finished. If unsuccessful or
# absent (only in the case of a CompiledCode), the ruby code code
# in the CompiledCode is run.
module Rubinius
class Executable
attr_accessor :serial
attr_accessor :primitive
attr_accessor :tags
def self.allocate
Rubinius.primitive :executable_allocate
raise PrimitiveFailure, "Executable.allocate primitive failed"
end
def invoke(name, mod, recv, args, block)
Rubinius.primitive :executable_invoke
raise PrimitiveFailure, "Executable#invoke primitive failed"
end
def custom_call_site
Rubinius.primitive :executable_set_custom_call_site
raise PrimitiveFailure, "Executable#set_custom_call_site primitive failed"
end
##
# Allows instances of Executable and its subclasses
# to duck-type as CompiledCode::Visibility since
# they can both be entries in a MethodTable.
def public?
true
end
def private?
false
end
alias_method :protected?, :private?
end
end