From 8ec913756107cc8e6aee965d0dc080039d4995ad Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Thu, 9 Sep 2021 22:57:03 -0700 Subject: Chapter 19.5 --- clox/src/object.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 clox/src/object.c (limited to 'clox/src/object.c') diff --git a/clox/src/object.c b/clox/src/object.c new file mode 100644 index 0000000..9622327 --- /dev/null +++ b/clox/src/object.c @@ -0,0 +1,45 @@ +#include +#include + +#include "memory.h" +#include "object.h" +#include "value.h" +#include "vm.h" + +#define ALLOCATE_OBJ(type, objectType) \ + (type *)allocateObject(sizeof(type), objectType) + +static Obj *allocateObject(size_t size, ObjType type) { + Obj *object = (Obj *)reallocate(NULL, 0, size); + object->type = type; + + object->next = vm.objects; + vm.objects = object; + return object; +} + +static ObjString *allocateString(char *chars, int length) { + ObjString *string = ALLOCATE_OBJ(ObjString, OBJ_STRING); + string->length = length; + string->chars = chars; + return string; +} + +ObjString *takeString(char *chars, int length) { + return allocateString(chars, length); +} + +ObjString *copyString(const char *chars, int length) { + char *heapChars = ALLOCATE(char, length + 1); + memcpy(heapChars, chars, length); + heapChars[length] = '\0'; + return allocateString(heapChars, length); +} + +void printObject(Value value) { + switch (OBJ_TYPE(value)) { + case OBJ_STRING: + printf("%s", AS_CSTRING(value)); + break; + } +} -- cgit v1.2.3-54-g00ecf