Class: RubyVM::RJIT::CPointer::Struct

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_vm/rjit/c_pointer.rb

Overview

Note: We’d like to avoid alphabetic method names to avoid a conflict with member methods. to_i and to_s are considered an exception.

Instance Method Summary collapse

Constructor Details

#initialize(addr, sizeof, members) ⇒ Struct

Returns a new instance of Struct.

Parameters:



11
12
13
14
15
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 11

def initialize(addr, sizeof, members)
  @addr = addr
  @sizeof = sizeof
  @members = members
end

Instance Method Details

#-(struct) ⇒ Object

Pointer diff

Raises:

  • (ArgumentError)


28
29
30
31
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 28

def -(struct)
  raise ArgumentError if self.class != struct.class
  (@addr - struct.to_i) / @sizeof
end

#[](member) ⇒ Object

Primitive API that does no automatic dereference TODO: remove this?

Parameters:



36
37
38
39
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 36

def [](member)
  type, offset = @members.fetch(member)
  type.new(@addr + offset / 8)
end

#to_iObject

Get a raw address



18
19
20
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 18

def to_i
  @addr
end

#to_sObject

Serialized address for generated code



23
24
25
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 23

def to_s
  "0x#{@addr.to_s(16)}"
end