Skip to content

Commit d38dade

Browse files
committed
Add a Data#initialize replacement for TruffleRuby
1 parent 6a82669 commit d38dade

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

lib/psych/visitors/to_ruby.rb

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,25 @@ module Visitors
1313
# This class walks a YAML AST, converting each node to Ruby
1414
class ToRuby < Psych::Visitors::Visitor
1515
unless RUBY_VERSION < "3.2"
16-
DATA_INITIALIZE = Data.instance_method(:initialize)
16+
DATA_INITIALIZE = begin
17+
init = Data.instance_method(:initialize)
18+
if init == Object.instance_method(:initialize)
19+
if RUBY_ENGINE == "truffleruby"
20+
init = Object.new.tap do |o|
21+
def o.bind_call(data, **members)
22+
data_mixin = data.class.ancestors
23+
.each_cons(2).find { Data.equal?(_2) }.first
24+
data_mixin
25+
.instance_method(:initialize)
26+
.bind_call(data, **members)
27+
end
28+
end.freeze
29+
else
30+
warn "Invalid Data.initialize"
31+
end
32+
end
33+
init
34+
end
1735
end
1836

1937
def self.create(symbolize_names: false, freeze: false, strict_integer: false, parse_symbols: true)

0 commit comments

Comments
 (0)