diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-05 17:49:21 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-05 17:49:21 +0900 |
| commit | 36f5b44578791a12619c189808dbc3cb4758e32a (patch) | |
| tree | e5e1191de50cae879aa5df0edec415a417d7866d /src/kernel.c | |
| parent | a10f85f855a3a20e71be21daef19a673c1791fd3 (diff) | |
| download | mruby-36f5b44578791a12619c189808dbc3cb4758e32a.tar.gz mruby-36f5b44578791a12619c189808dbc3cb4758e32a.zip | |
Add new method Kernel#frozen?; ref #3370
Diffstat (limited to 'src/kernel.c')
| -rw-r--r-- | src/kernel.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c index 5e44d73b4..677c0d519 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -473,6 +473,29 @@ mrb_obj_freeze(mrb_state *mrb, mrb_value self) return self; } +static mrb_value +mrb_obj_frozen(mrb_state *mrb, mrb_value self) +{ + struct RBasic *b; + + switch (mrb_type(self)) { + case MRB_TT_FALSE: + case MRB_TT_TRUE: + case MRB_TT_FIXNUM: + case MRB_TT_SYMBOL: + case MRB_TT_FLOAT: + return mrb_true_value(); + default: + break; + } + + b = mrb_basic_ptr(self); + if (!MRB_FROZEN_P(b)) { + return mrb_false_value(); + } + return mrb_true_value(); +} + /* 15.3.1.3.15 */ /* * call-seq: @@ -1148,6 +1171,7 @@ mrb_init_kernel(mrb_state *mrb) 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, "frozen?", mrb_obj_frozen, 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 */ |
