summaryrefslogtreecommitdiff
path: root/struct.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-01 17:26:45 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-02 00:56:52 +0900
commita14a1a5626a4d8e661a3e606f8f92b8c455b9a04 (patch)
treeddef361869df97d4c71e0a6540fe471af2aaa306 /struct.c
parent06a0c580161db7084e8276fcd9fbb5d25bde4a03 (diff)
downloadruby-a14a1a5626a4d8e661a3e606f8f92b8c455b9a04.tar.gz
[Feature #19163] Data object should be frozen
Diffstat (limited to 'struct.c')
-rw-r--r--struct.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/struct.c b/struct.c
index 6f67984cf2..def15b0186 100644
--- a/struct.c
+++ b/struct.c
@@ -1818,9 +1818,19 @@ rb_data_initialize_m(int argc, const VALUE *argv, VALUE self)
if (arg.unknown_keywords != Qnil) {
rb_exc_raise(rb_keyword_error_new("unknown", arg.unknown_keywords));
}
+ OBJ_FREEZE_RAW(self);
return Qnil;
}
+/* :nodoc: */
+static VALUE
+rb_data_init_copy(VALUE copy, VALUE s)
+{
+ copy = rb_struct_init_copy(copy, s);
+ RB_OBJ_FREEZE_RAW(copy);
+ return copy;
+}
+
/*
* call-seq:
* inspect -> string
@@ -2180,7 +2190,7 @@ InitVM_Struct(void)
#endif
rb_define_method(rb_cData, "initialize", rb_data_initialize_m, -1);
- rb_define_method(rb_cData, "initialize_copy", rb_struct_init_copy, 1);
+ rb_define_method(rb_cData, "initialize_copy", rb_data_init_copy, 1);
rb_define_method(rb_cData, "==", rb_data_equal, 1);
rb_define_method(rb_cData, "eql?", rb_data_eql, 1);