summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-12-10 16:02:47 +0900
committerGitHub <[email protected]>2016-12-10 16:02:47 +0900
commit3cc913490b708fe4d0e78e48f86e6e39cf3d8576 (patch)
tree90cac9474b018643579c88d8280950ec2d995524 /src
parentd93422315cceb4fbe0fcb17d070f329518343e49 (diff)
parentf7a891fa8979bdb82410e1adc98765013cc29a79 (diff)
downloadmruby-3cc913490b708fe4d0e78e48f86e6e39cf3d8576.tar.gz
mruby-3cc913490b708fe4d0e78e48f86e6e39cf3d8576.zip
Merge pull request #3329 from bouk/reuse
Mark all the built-in classes during GC sweep
Diffstat (limited to 'src')
-rw-r--r--src/gc.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index e8523af79..c75a0f9aa 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -833,6 +833,26 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc)
}
/* mark class hierarchy */
mrb_gc_mark(mrb, (struct RBasic*)mrb->object_class);
+
+ /* mark built-in classes */
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->class_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->module_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->proc_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->string_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->array_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->hash_class);
+
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->float_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->fixnum_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->true_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->false_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->nil_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->symbol_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->kernel_module);
+
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->eException_class);
+ mrb_gc_mark(mrb, (struct RBasic*)mrb->eStandardError_class);
+
/* mark top_self */
mrb_gc_mark(mrb, (struct RBasic*)mrb->top_self);
/* mark exception */