Skip to content

Commit f88aada

Browse files
committed
fix rb_imemo_obj_fields_new
1 parent de51e67 commit f88aada

1 file changed

Lines changed: 3 additions & 4 deletions

File tree

imemo.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,14 @@ rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt)
109109
return tmpbuf;
110110
}
111111

112-
static const size_t IMEMO_BUF_OVERHEAD = sizeof(VALUE); // flags
113-
114112
VALUE
115113
rb_imemo_obj_fields_new(VALUE klass, size_t capa)
116114
{
117115
klass = rb_singleton_class(klass);
118116

119-
if (rb_gc_size_allocatable_p(capa + IMEMO_BUF_OVERHEAD)) {
120-
VALUE fields = rb_imemo_new(imemo_obj_fields, klass, capa + IMEMO_BUF_OVERHEAD);
117+
size_t embedded_size = sizeof(struct rb_obj_fields) + ((capa - 1) * sizeof(VALUE));
118+
if (rb_gc_size_allocatable_p(embedded_size)) {
119+
VALUE fields = rb_imemo_new(imemo_obj_fields, klass, embedded_size);
121120
RUBY_ASSERT(IMEMO_TYPE_P(fields, imemo_obj_fields));
122121
return fields;
123122
}

0 commit comments

Comments
 (0)