mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Inherit MRB_FL_UNDEF_ALLOCATE in subclasses
If `Class#allocate` is prohibited, subclasses should also be implicitly prohibited. ```ruby p Class.new(Struct).allocate.class # => #<Class:0x82362ac00> by #6122 # => allocator undefined for #<Class:0x000000083a983220> (TypeError) by Ruby 3.2 ``` Added `MRB_DEFINE_ALLOCATOR()` to allow subclasses to use `Class#allocate`. Supplement to #6122.
This commit is contained in:
@@ -78,6 +78,7 @@ mrb_class(mrb_state *mrb, mrb_value v)
|
||||
#define MRB_FL_UNDEF_ALLOCATE (1 << 6)
|
||||
#define MRB_UNDEF_ALLOCATOR(c) (mrb_assert((c)->tt == MRB_TT_CLASS), (c)->flags |= MRB_FL_UNDEF_ALLOCATE)
|
||||
#define MRB_UNDEF_ALLOCATOR_P(c) ((c)->flags & MRB_FL_UNDEF_ALLOCATE)
|
||||
#define MRB_DEFINE_ALLOCATOR(c) ((c)->flags &= ~MRB_FL_UNDEF_ALLOCATE)
|
||||
|
||||
MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, mrb_method_t);
|
||||
MRB_API void mrb_alias_method(mrb_state*, struct RClass *c, mrb_sym a, mrb_sym b);
|
||||
|
||||
Reference in New Issue
Block a user