Skip to content

Commit 325b073

Browse files
committed
Use rb_struct_initialize to initialize Data
1 parent 1645e0c commit 325b073

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

ext/psych/psych_to_ruby.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ static VALUE path2class(VALUE self, VALUE path)
2424
return rb_path_to_class(path);
2525
}
2626

27+
static VALUE init_struct(VALUE self, VALUE data, VALUE attrs)
28+
{
29+
VALUE args = rb_ary_new2(1);
30+
rb_ary_push(args, attrs);
31+
rb_struct_initialize(data, args);
32+
33+
return data;
34+
}
35+
2736
void Init_psych_to_ruby(void)
2837
{
2938
VALUE psych = rb_define_module("Psych");
@@ -33,6 +42,7 @@ void Init_psych_to_ruby(void)
3342
VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject);
3443
cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor);
3544

45+
rb_define_private_method(cPsychVisitorsToRuby, "init_struct", init_struct, 2);
3646
rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2);
3747
rb_define_private_method(class_loader, "path2class", path2class, 1);
3848
}

lib/psych/visitors/to_ruby.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ def visit_Psych_Nodes_Mapping o
219219
revive_data_members(members, o)
220220
end
221221
data ||= allocate_anon_data(o, members)
222-
data.send(:initialize, **members)
222+
init_struct(data, **members)
223+
data.freeze
223224
data
224225

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

0 commit comments

Comments
 (0)