diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-21 09:10:42 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-21 09:10:42 +0000 |
commit | 719531dba564368add7c66b228c557b6bc2ae51d (patch) | |
tree | 368a942f6fc4b266b554c87cf204152018846377 | |
parent | f5f328d4977172b78b677823e59c3984ad786380 (diff) |
fix up imemo_alloc
* internal.h (rb_imemo_alloc_struct), gc.c (gc_mark_imemo): turned
next into the pointer to chain.
* parse.y (NEWHEAP): needs a cast.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | gc.c | 11 | ||||
-rw-r--r-- | internal.h | 2 | ||||
-rw-r--r-- | parse.y | 2 |
3 files changed, 10 insertions, 5 deletions
@@ -4532,10 +4532,14 @@ gc_mark_imemo(rb_objspace_t *objspace, VALUE obj) rb_iseq_mark((rb_iseq_t *)obj); return; case imemo_alloc: - rb_gc_mark_locations(RANY(obj)->as.imemo.alloc.ptr, - RANY(obj)->as.imemo.alloc.ptr + RANY(obj)->as.imemo.alloc.cnt); - rb_gc_mark(RANY(obj)->as.imemo.alloc.next); + { + const rb_imemo_alloc_t *m = &RANY(obj)->as.imemo.alloc; + do { + rb_gc_mark_locations(m->ptr, m->ptr + m->cnt); + } while ((m = m->next) != NULL); + } return; + case imemo_mask: break; #if VM_CHECK_MODE > 0 default: VM_UNREACHABLE(gc_mark_imemo); @@ -9376,6 +9380,7 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj) IMEMO_NAME(iseq); IMEMO_NAME(alloc); #undef IMEMO_NAME + case imemo_mask: break; } snprintf(buff, buff_size, "%s %s", buff, imemo_name); diff --git a/internal.h b/internal.h index b3d3463895..10c58d6533 100644 --- a/internal.h +++ b/internal.h @@ -934,7 +934,7 @@ typedef struct rb_imemo_alloc_struct { VALUE flags; VALUE reserved; VALUE *ptr; /* malloc'ed buffer */ - VALUE next; /* next imemo */ + struct rb_imemo_alloc_struct *next; /* next imemo */ size_t cnt; /* buffer size in VALUE */ } rb_imemo_alloc_t; @@ -11517,7 +11517,7 @@ rb_parser_set_yydebug(VALUE self, VALUE flag) #ifndef RIPPER #ifdef YYMALLOC #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) -#define NEWHEAP() rb_imemo_new(imemo_alloc, 0, (VALUE)parser->heap, 0, 0) +#define NEWHEAP() (rb_imemo_alloc_t *)rb_imemo_new(imemo_alloc, 0, (VALUE)parser->heap, 0, 0) #define ADD2HEAP(n, c, p) ((parser->heap = (n))->ptr = (p), \ (n)->cnt = (c), (p)) |