summaryrefslogtreecommitdiff
path: root/lib/ruby_vm/mjit/c_pointer.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2023-02-07 23:25:33 -0800
committerTakashi Kokubun <[email protected]>2023-03-05 22:11:20 -0800
commitd11f960fb0243f2285f7f476c8b0fd244bbbdfc5 (patch)
treee02f87d7caf86ba3e4b845927091a77832568c55 /lib/ruby_vm/mjit/c_pointer.rb
parent5a1cee1d965301b05e9d2d85b0ee39ef3c6757f7 (diff)
Implement non-embedded ivars
Diffstat (limited to 'lib/ruby_vm/mjit/c_pointer.rb')
-rw-r--r--lib/ruby_vm/mjit/c_pointer.rb11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/ruby_vm/mjit/c_pointer.rb b/lib/ruby_vm/mjit/c_pointer.rb
index c91f6f646b..73cf267482 100644
--- a/lib/ruby_vm/mjit/c_pointer.rb
+++ b/lib/ruby_vm/mjit/c_pointer.rb
@@ -135,12 +135,13 @@ module RubyVM::MJIT
define_singleton_method(:sizeof) { sizeof }
# Part of Struct's offsetof implementation
- define_singleton_method(:offsetof) do |*fields|
- if fields.size == 1
- 0
- else
- raise NotImplementedError
+ define_singleton_method(:offsetof) do |field, *fields|
+ member = members.fetch(field)
+ offset = 0
+ unless fields.empty?
+ offset += member.offsetof(*fields)
end
+ offset
end
define_method(:initialize) do |addr|