mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #313 from masamitsu-murase/fix_struct_new
Fix Struct#new and GC
This commit is contained in:
@@ -430,6 +430,18 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_STRUCT
|
||||
case MRB_TT_STRUCT:
|
||||
{
|
||||
struct RStruct *s = (struct RStruct*)obj;
|
||||
long i;
|
||||
for (i=0; i<s->len; i++){
|
||||
mrb_gc_mark_value(mrb, s->ptr[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
+2
-2
@@ -286,8 +286,8 @@ make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass * k
|
||||
nstr = mrb_obj_value(c);
|
||||
mrb_iv_set(mrb, nstr, mrb_intern(mrb, "__members__"), members);
|
||||
|
||||
mrb_define_class_method(mrb, c, "new", mrb_class_new_instance_m, ARGS_ANY());
|
||||
mrb_define_class_method(mrb, c, "[]", mrb_class_new_instance_m, ARGS_ANY());
|
||||
mrb_define_class_method(mrb, c, "new", mrb_instance_new, ARGS_ANY());
|
||||
mrb_define_class_method(mrb, c, "[]", mrb_instance_new, ARGS_ANY());
|
||||
mrb_define_class_method(mrb, c, "members", mrb_struct_s_members_m, ARGS_NONE());
|
||||
//RSTRUCT(nstr)->basic.c->super = c->c;
|
||||
ptr_members = RARRAY_PTR(members);
|
||||
|
||||
@@ -16,6 +16,13 @@ if Object.const_defined?(:Struct)
|
||||
c.members == [:m1,:m2]
|
||||
end
|
||||
|
||||
assert('Struct#==', '15.2.18.4.1') do
|
||||
c = Struct.new(:m1, :m2)
|
||||
cc1 = c.new(1,2)
|
||||
cc2 = c.new(1,2)
|
||||
cc1 == cc2
|
||||
end
|
||||
|
||||
assert('Struct#[]', '15.2.18.4.2') do
|
||||
c = Struct.new(:m1, :m2)
|
||||
cc = c.new(1,2)
|
||||
|
||||
Reference in New Issue
Block a user