summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2025-11-22 19:58:43 -0800
committerJeremy Evans <code@jeremyevans.net>2025-12-10 07:35:50 +0900
commite436dba9fee4c75104212ad0fd16ab7f753985c4 (patch)
tree9b95734630cf5e0517604acdda4d0405a6b14518 /eval.c
parent76fb0d244b95a23116bfe72bb2422395c3a76477 (diff)
Use rb_error_frozen_object in rb_class_modify_check
This provides information on the class of the frozen object. It also results in a much simpler implementation. Fixes [Bug #21374]
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c32
1 files changed, 1 insertions, 31 deletions
diff --git a/eval.c b/eval.c
index 4fbb0e7997..ee5bc43f9c 100644
--- a/eval.c
+++ b/eval.c
@@ -428,40 +428,10 @@ rb_class_modify_check(VALUE klass)
rb_class_set_initialized(klass);
}
if (OBJ_FROZEN(klass)) {
- const char *desc;
-
if (RCLASS_SINGLETON_P(klass)) {
- desc = "object";
klass = RCLASS_ATTACHED_OBJECT(klass);
- if (!SPECIAL_CONST_P(klass)) {
- switch (BUILTIN_TYPE(klass)) {
- case T_MODULE:
- case T_ICLASS:
- desc = "Module";
- break;
- case T_CLASS:
- desc = "Class";
- break;
- default:
- break;
- }
- }
- }
- else {
- switch (BUILTIN_TYPE(klass)) {
- case T_MODULE:
- case T_ICLASS:
- desc = "module";
- break;
- case T_CLASS:
- desc = "class";
- break;
- default:
- Check_Type(klass, T_CLASS);
- UNREACHABLE;
- }
}
- rb_frozen_error_raise(klass, "can't modify frozen %s: %"PRIsVALUE, desc, klass);
+ rb_error_frozen_object(klass);
}
}