Skip to content

Commit 2547051

Browse files
committed
Invoke initialize from Ruby, not native code
JRuby does not expose the `initialize` method for a given Data instance to native code, so there's no equivalent to calling `rb_struct_initialize`. This change moves that initialization to a Ruby `__send__` and removes the native stub method `init_data`. Fixes broken JRuby `Data` logic after #692.
1 parent 5af4cec commit 2547051

File tree

2 files changed

+1
-10
lines changed

2 files changed

+1
-10
lines changed

ext/psych/psych_to_ruby.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ static VALUE path2class(VALUE self, VALUE path)
2828
return rb_path_to_class(path);
2929
}
3030

31-
static VALUE init_data(VALUE self, VALUE data, VALUE values)
32-
{
33-
rb_struct_initialize(data, values);
34-
return data;
35-
}
36-
3731
void Init_psych_to_ruby(void)
3832
{
3933
VALUE psych = rb_define_module("Psych");
@@ -43,7 +37,6 @@ void Init_psych_to_ruby(void)
4337
VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject);
4438
cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor);
4539

46-
rb_define_private_method(cPsychVisitorsToRuby, "init_data", init_data, 2);
4740
rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2);
4841
rb_define_private_method(class_loader, "path2class", path2class, 1);
4942
}

lib/psych/visitors/to_ruby.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,7 @@ def visit_Psych_Nodes_Mapping o
219219
revive_data_members(members, o)
220220
end
221221
data ||= allocate_anon_data(o, members)
222-
values = data.members.map { |m| members[m] }
223-
init_data(data, values)
224-
data.freeze
222+
data.__send__ :initialize, **members
225223
data
226224

227225
when /^!ruby\/object:?(.*)?$/

0 commit comments

Comments
 (0)