class RubyVM::RJIT::CPointer::Pointer
Attributes
type[R]
Public Class Methods
new(addr, type)
click to toggle source
@param addr [Integer] @param type [Class] RubyVM::RJIT::CType::*
# File ruby_vm/rjit/c_pointer.rb, line 280 def initialize(addr, type) @addr = addr @type = type end
Private Class Methods
define(block)
click to toggle source
Calls superclass method
# File ruby_vm/rjit/c_pointer.rb, line 321 def self.define(block) Class.new(self) do define_method(:initialize) do |addr| super(addr, block.call) end # Type-level []=: Used by struct fields # @param addr [Integer] # @param value [Integer, RubyVM::RJIT::CPointer::Struct] an address itself, or an object that return an address with to_i define_singleton_method(:[]=) do |addr, value| value = value.to_i Fiddle::Pointer.new(addr)[0, Fiddle::SIZEOF_VOIDP] = [value].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP]) end end end
Public Instance Methods
*()
click to toggle source
Dereference
# File ruby_vm/rjit/c_pointer.rb, line 292 def * return nil if dest_addr == 0 @type.new(dest_addr) end
+(index)
click to toggle source
Move addr to addess this pointer like an array
# File ruby_vm/rjit/c_pointer.rb, line 286 def +(index) raise ArgumentError unless index.is_a?(Integer) Pointer.new(@addr + index * Fiddle::SIZEOF_VOIDP, @type) end
[](index)
click to toggle source
Array
access
# File ruby_vm/rjit/c_pointer.rb, line 298 def [](index) (self + index).* end
[]=(index, value)
click to toggle source
Array
set @param index [Integer] @param value [Integer, RubyVM::RJIT::CPointer::Struct
] an address itself or an object that return an address with to_i
# File ruby_vm/rjit/c_pointer.rb, line 305 def []=(index, value) Fiddle::Pointer.new(@addr + index * Fiddle::SIZEOF_VOIDP)[0, Fiddle::SIZEOF_VOIDP] = [value.to_i].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP]) end
to_i()
click to toggle source
Get a raw address
# File ruby_vm/rjit/c_pointer.rb, line 311 def to_i @addr end
Private Instance Methods
dest_addr()
click to toggle source
# File ruby_vm/rjit/c_pointer.rb, line 317 def dest_addr Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_VOIDP].unpack1(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP]) end