summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-06-30 14:46:38 +0900
committerKOBAYASHI Shuji <[email protected]>2019-06-30 15:06:39 +0900
commit97c9e6b00032cd8a7132b43911c05e44732a4c56 (patch)
tree6b4099c5c7a8e6b0b7bc542d66ca601c682face6 /src
parentcf6972408335a69f2f6cc007f74c6afd316d0d96 (diff)
downloadmruby-97c9e6b00032cd8a7132b43911c05e44732a4c56.tar.gz
mruby-97c9e6b00032cd8a7132b43911c05e44732a4c56.zip
Fix `include`, `prepend` and `extend` to frozen object
Diffstat (limited to 'src')
-rw-r--r--src/class.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index 373f2aec7..1064870a8 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1070,8 +1070,8 @@ include_module_at(mrb_state *mrb, struct RClass *c, struct RClass *ins_pos, stru
MRB_API void
mrb_include_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
{
- int changed = include_module_at(mrb, c, find_origin(c), m, 1);
- if (changed < 0) {
+ mrb_check_frozen(mrb, c);
+ if (include_module_at(mrb, c, find_origin(c), m, 1) < 0) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "cyclic include detected");
}
}
@@ -1082,6 +1082,7 @@ mrb_prepend_module(mrb_state *mrb, struct RClass *c, struct RClass *m)
struct RClass *origin;
int changed = 0;
+ mrb_check_frozen(mrb, c);
if (!(c->flags & MRB_FL_CLASS_IS_PREPENDED)) {
origin = (struct RClass*)mrb_obj_alloc(mrb, MRB_TT_ICLASS, c);
origin->flags |= MRB_FL_CLASS_IS_ORIGIN | MRB_FL_CLASS_IS_INHERITED;