From cccec929bc11925dc4ae8b8c89c87899d8256a84 Mon Sep 17 00:00:00 2001 From: Sara <sara@saragerretsen.nl> Date: Thu, 25 Jan 2024 14:14:01 +0100 Subject: [PATCH] feat: variant now uses mirror and drop to manage objects --- variant.c | 12 +++++++++--- variant.h | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/variant.c b/variant.c index 2f63dd4..62e6665 100644 --- a/variant.c +++ b/variant.c @@ -1,8 +1,10 @@ #include "variant.h" -#include "debug.h" #include "ctype.h" +#include "mirror.h" #include "string.h" #include "strutil.h" +#include "drop.h" +#include "debug.h" Variant variant_from_str(const char* str) { size_t length = strlen(str); @@ -54,8 +56,12 @@ void destroy_contained(Variant* self) { self->as_string = NULL; break; case Variant_Object: - free(self->as_object); - self->as_object = NULL; + if(TC_MIRRORS(self->as_object, Drop)) { + Drop drop = TC_CAST(self->as_object, Drop); + drop.tc->drop(drop.data); + } + self->as_object.data = NULL; + self->as_object.tc = NULL; break; } } diff --git a/variant.h b/variant.h index 2446d30..ef3fce0 100644 --- a/variant.h +++ b/variant.h @@ -2,6 +2,7 @@ #define _fencer_variant_h #include "vmath.h" +#include "mirror.h" typedef enum VariantType { Variant_Undefined = 0x0, @@ -17,7 +18,7 @@ typedef struct Variant { union { double as_number; Vector as_vector; - void* as_object; + Mirror as_object; char* as_string; }; } Variant;