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 246
def initialize(addr, type)
  @addr = addr
  @type = type
end

Public Instance Methods

*() click to toggle source

Dereference

# File ruby_vm/rjit/c_pointer.rb, line 258
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 252
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 264
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 271
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 277
def to_i
  @addr
end