Class: RubyVM::RJIT::CPointer::Immediate
- Inherits:
-
Object
- Object
- RubyVM::RJIT::CPointer::Immediate
- Defined in:
- lib/ruby_vm/rjit/c_pointer.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#* ⇒ Object
Dereference.
-
#+(index) ⇒ Object
Move addr to addess this pointer like an array.
-
#[](index) ⇒ Object
Array access.
-
#[]=(index, value) ⇒ Object
Array set.
-
#initialize(addr, size, pack) ⇒ Immediate
constructor
A new instance of Immediate.
-
#to_i ⇒ Object
Get a raw address.
-
#to_s ⇒ Object
Serialized address for generated code.
Constructor Details
#initialize(addr, size, pack) ⇒ Immediate
Returns a new instance of Immediate.
169 170 171 172 173 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 169 def initialize(addr, size, pack) @addr = addr @size = size @pack = pack end |
Class Method Details
.define(fiddle_type) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 207 def self.define(fiddle_type) size = Fiddle::PackInfo::SIZE_MAP.fetch(fiddle_type) pack = Fiddle::PackInfo::PACK_MAP.fetch(fiddle_type) Class.new(self) do define_method(:initialize) do |addr| super(addr, size, pack) end define_singleton_method(:size) do size end # Type-level []=: Used by struct fields define_singleton_method(:[]=) do |addr, value| Fiddle::Pointer.new(addr)[0, size] = [value].pack(pack) end end end |
Instance Method Details
#* ⇒ Object
Dereference
186 187 188 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 186 def * self[0] end |
#+(index) ⇒ Object
Move addr to addess this pointer like an array
181 182 183 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 181 def +(index) Immediate.new(@addr + index * @size, @size, @pack) end |
#[](index) ⇒ Object
Array access
191 192 193 194 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 191 def [](index) return nil if @addr == 0 Fiddle::Pointer.new(@addr + index * @size)[0, @size].unpack1(@pack) end |
#[]=(index, value) ⇒ Object
Array set
197 198 199 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 197 def []=(index, value) Fiddle::Pointer.new(@addr + index * @size)[0, @size] = [value].pack(@pack) end |
#to_i ⇒ Object
Get a raw address
176 177 178 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 176 def to_i @addr end |
#to_s ⇒ Object
Serialized address for generated code. Used for embedding things like body->iseq_encoded.
202 203 204 |
# File 'lib/ruby_vm/rjit/c_pointer.rb', line 202 def to_s "0x#{Integer(@addr).to_s(16)}" end |