diff --git a/shape.c b/shape.c index e264e7bee5..cf1a4426eb 100644 --- a/shape.c +++ b/shape.c @@ -145,6 +145,7 @@ get_next_shape_internal(rb_shape_t * shape, ID id, enum shape_type shape_type, b new_shape->type = (uint8_t)shape_type; new_shape->capacity = shape->capacity; + new_shape->edges = NULL; switch (shape_type) { case SHAPE_IVAR: diff --git a/shape.h b/shape.h index b635ddf8b7..5366631f8d 100644 --- a/shape.h +++ b/shape.h @@ -28,12 +28,12 @@ typedef uint16_t shape_id_t; # define SHAPE_FLAG_SHIFT ((SIZEOF_VALUE * 8) - SHAPE_ID_NUM_BITS) -# define SHAPE_BITMAP_SIZE 16384 +# define SHAPE_BUFFER_SIZE 0x80000 # define SHAPE_MAX_VARIATIONS 8 # define SHAPE_MAX_NUM_IVS 80 -# define MAX_SHAPE_ID (SHAPE_MASK - 1) +# define MAX_SHAPE_ID SHAPE_BUFFER_SIZE # define INVALID_SHAPE_ID SHAPE_MASK # define ROOT_SHAPE_ID 0x0 diff --git a/vm.c b/vm.c index 959966f562..11fc54095b 100644 --- a/vm.c +++ b/vm.c @@ -4022,13 +4022,13 @@ Init_vm_objects(void) #endif #ifdef HAVE_MMAP - vm->shape_list = (rb_shape_t *)mmap(NULL, rb_size_mul_or_raise(SHAPE_BITMAP_SIZE * 32, sizeof(rb_shape_t), rb_eRuntimeError), + vm->shape_list = (rb_shape_t *)mmap(NULL, rb_size_mul_or_raise(SHAPE_BUFFER_SIZE, sizeof(rb_shape_t), rb_eRuntimeError), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (vm->shape_list == MAP_FAILED) { vm->shape_list = 0; } #else - vm->shape_list = xcalloc(SHAPE_BITMAP_SIZE * 32, sizeof(rb_shape_t)); + vm->shape_list = xcalloc(SHAPE_BUFFER_SIZE, sizeof(rb_shape_t)); #endif if (!vm->shape_list) {