summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-27 16:44:57 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-27 16:44:57 +0000
commite35fe8d11b889a5646a23df06bbecf16f88c518a (patch)
treed4346b34db86ab7c09ccb2db3f0e2803664e9421 /gc.c
parent15270f48a9f3ccd7e57798d7eff4dd8d5d83c259 (diff)
Revert "Revert "Manage AST NODEs out of GC""
This re-introduces r60485. This reverts commit 5a176b75b1187cbd3861c387bde65ff66396a07c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 4ba06c2952..48053b66c5 100644
--- a/gc.c
+++ b/gc.c
@@ -434,6 +434,7 @@ typedef struct RVALUE {
const rb_iseq_t iseq;
rb_env_t env;
struct rb_imemo_alloc_struct alloc;
+ ast_t ast;
} imemo;
struct {
struct RBasic basic;
@@ -2359,6 +2360,9 @@ obj_free(rb_objspace_t *objspace, VALUE obj)
case imemo_alloc:
xfree(RANY(obj)->as.imemo.alloc.ptr);
break;
+ case imemo_ast:
+ rb_ast_free(&RANY(obj)->as.imemo.ast);
+ break;
default:
break;
}
@@ -4540,6 +4544,9 @@ gc_mark_imemo(rb_objspace_t *objspace, VALUE obj)
} while ((m = m->next) != NULL);
}
return;
+ case imemo_ast:
+ rb_ast_mark(&RANY(obj)->as.imemo.ast);
+ return;
#if VM_CHECK_MODE > 0
default:
VM_UNREACHABLE(gc_mark_imemo);