summaryrefslogtreecommitdiff
path: root/ext/psych/psych_to_ruby.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/psych/psych_to_ruby.c')
-rw-r--r--ext/psych/psych_to_ruby.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/psych/psych_to_ruby.c b/ext/psych/psych_to_ruby.c
index ffe0c69c7f..d473a5f840 100644
--- a/ext/psych/psych_to_ruby.c
+++ b/ext/psych/psych_to_ruby.c
@@ -24,6 +24,15 @@ static VALUE path2class(VALUE self, VALUE path)
return rb_path_to_class(path);
}
+static VALUE init_struct(VALUE self, VALUE data, VALUE attrs)
+{
+ VALUE args = rb_ary_new2(1);
+ rb_ary_push(args, attrs);
+ rb_struct_initialize(data, args);
+
+ return data;
+}
+
void Init_psych_to_ruby(void)
{
VALUE psych = rb_define_module("Psych");
@@ -33,6 +42,7 @@ void Init_psych_to_ruby(void)
VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject);
cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor);
+ rb_define_private_method(cPsychVisitorsToRuby, "init_struct", init_struct, 2);
rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2);
rb_define_private_method(class_loader, "path2class", path2class, 1);
}