From e3b5206ca832f3709107f27f704bd45495ddfbf1 Mon Sep 17 00:00:00 2001 From: Evan Shaw Date: Mon, 5 Jan 2015 15:03:50 +1300 Subject: [PATCH] Use a flexible array for strings --- src/wren_value.c | 10 +--------- src/wren_value.h | 4 +--- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/wren_value.c b/src/wren_value.c index 2f9447bb..5782e94a 100644 --- a/src/wren_value.c +++ b/src/wren_value.c @@ -339,13 +339,8 @@ Value wrenNewString(WrenVM* vm, const char* text, size_t length) Value wrenNewUninitializedString(WrenVM* vm, size_t length) { - // Allocate before the string object in case this triggers a GC which would - // free the string object. - char* heapText = allocate(vm, length + 1); - - ObjString* string = allocate(vm, sizeof(ObjString)); + ObjString* string = allocate(vm, sizeof(ObjString) + length + 1); initObj(vm, &string->obj, OBJ_STRING, vm->stringClass); - string->value = heapText; return OBJ_VAL(string); } @@ -616,9 +611,6 @@ void wrenFreeObj(WrenVM* vm, Obj* obj) break; case OBJ_STRING: - wrenReallocate(vm, ((ObjString*)obj)->value, 0, 0); - break; - case OBJ_CLOSURE: case OBJ_FIBER: case OBJ_INSTANCE: diff --git a/src/wren_value.h b/src/wren_value.h index 81c033a7..0f5279d4 100644 --- a/src/wren_value.h +++ b/src/wren_value.h @@ -108,9 +108,7 @@ DECLARE_BUFFER(Value, Value); typedef struct { Obj obj; - char* value; - - // TODO: Flexible array. + char value[]; } ObjString; // The dynamically allocated data structure for a variable that has been used