summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2016-12-11 01:45:38 +0900
committerTakashi Kokubun <[email protected]>2016-12-11 03:44:15 +0900
commit10bb7ad693e7c7443de924a39c1fedb4461108ba (patch)
tree8ba3d7bd9992f0097f99a034012565adb43c4d4a /src/kernel.c
parent3cc913490b708fe4d0e78e48f86e6e39cf3d8576 (diff)
downloadmruby-10bb7ad693e7c7443de924a39c1fedb4461108ba.tar.gz
mruby-10bb7ad693e7c7443de924a39c1fedb4461108ba.zip
Implement Object#freeze
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c
index c63e05596..78e57a17a 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -450,6 +450,15 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
return mrb_obj_extend(mrb, argc, argv, self);
}
+static mrb_value
+mrb_obj_freeze(mrb_state *mrb, mrb_value self)
+{
+ struct RBasic *b = mrb_basic_ptr(self);
+
+ RBASIC_SET_FROZEN_FLAG(b);
+ return self;
+}
+
/* 15.3.1.3.15 */
/*
* call-seq:
@@ -1124,6 +1133,7 @@ mrb_init_kernel(mrb_state *mrb)
mrb_define_method(mrb, krn, "eql?", mrb_obj_equal_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.10 */
mrb_define_method(mrb, krn, "equal?", mrb_obj_equal_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.11 */
mrb_define_method(mrb, krn, "extend", mrb_obj_extend_m, MRB_ARGS_ANY()); /* 15.3.1.3.13 */
+ mrb_define_method(mrb, krn, "freeze", mrb_obj_freeze, MRB_ARGS_NONE());
mrb_define_method(mrb, krn, "global_variables", mrb_f_global_variables, MRB_ARGS_NONE()); /* 15.3.1.3.14 */
mrb_define_method(mrb, krn, "hash", mrb_obj_hash, MRB_ARGS_NONE()); /* 15.3.1.3.15 */
mrb_define_method(mrb, krn, "initialize_copy", mrb_obj_init_copy, MRB_ARGS_REQ(1)); /* 15.3.1.3.16 */