summaryrefslogtreecommitdiff
path: root/lib/mjit
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-09-11 15:39:32 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2022-09-11 15:39:40 +0900
commit472e7b8518fbde98be3f0a06192a6695697bf879 (patch)
tree1a22d41b5c692a79023a111790438fa2d40a3e41 /lib/mjit
parent106744107b485a371ed788fe590c6ce778de16df (diff)
MJIT: Use the built-in PACK_MAP
106744107b made this possible.
Diffstat (limited to 'lib/mjit')
-rw-r--r--lib/mjit/c_pointer.rb16
1 files changed, 4 insertions, 12 deletions
diff --git a/lib/mjit/c_pointer.rb b/lib/mjit/c_pointer.rb
index 75ed8babd5..ce0948197d 100644
--- a/lib/mjit/c_pointer.rb
+++ b/lib/mjit/c_pointer.rb
@@ -2,14 +2,6 @@ module RubyVM::MJIT
# Every class under this namespace is a pointer. Even if the type is
# immediate, it shouldn't be dereferenced until `*` is called.
module CPointer
- # Patched PACK_MAP to support unsigned operations
- PACK_MAP = Fiddle::PackInfo::PACK_MAP.dup
- PACK_MAP.keys.each do |type|
- if type.negative? || type == Fiddle::TYPE_VOIDP
- PACK_MAP[type] = PACK_MAP[type].upcase
- end
- end
-
# 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.
class Struct
@@ -188,7 +180,7 @@ module RubyVM::MJIT
# @param fiddle_type [Integer] Fiddle::TYPE_*
def self.define(fiddle_type)
size = Fiddle::PackInfo::SIZE_MAP.fetch(fiddle_type)
- pack = PACK_MAP.fetch(fiddle_type)
+ pack = Fiddle::PackInfo::PACK_MAP.fetch(fiddle_type)
Class.new(self) do
define_method(:initialize) do |addr|
@@ -252,13 +244,13 @@ module RubyVM::MJIT
# @param value [Integer, RubyVM::MJIT::CPointer::Struct] an address itself or an object that return an address with to_i
def []=(index, value)
Fiddle::Pointer.new(@addr + index * Fiddle::SIZEOF_VOIDP)[0, Fiddle::SIZEOF_VOIDP] =
- [value.to_i].pack(PACK_MAP[Fiddle::TYPE_VOIDP])
+ [value.to_i].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
end
private
def dest_addr
- Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_VOIDP].unpack1(PACK_MAP[Fiddle::TYPE_VOIDP])
+ Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_VOIDP].unpack1(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
end
def self.define(block)
@@ -272,7 +264,7 @@ module RubyVM::MJIT
# @param value [Integer, RubyVM::MJIT::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(PACK_MAP[Fiddle::TYPE_VOIDP])
+ Fiddle::Pointer.new(addr)[0, Fiddle::SIZEOF_VOIDP] = [value].pack(Fiddle::PackInfo::PACK_MAP[Fiddle::TYPE_VOIDP])
end
end
end