From 09d96082dabd829dc0355fce254a3b713c858d40 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 9 Mar 2023 16:32:27 -0600 Subject: [PATCH] added: sensible overloads for `delete` --- core/builtin.onyx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/builtin.onyx b/core/builtin.onyx index aa5402c8..332ac85b 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -349,6 +349,30 @@ cfree :: (ptr: rawptr) => raw_free(context.allocator, ptr); __make_overload :: #match {} delete :: #match {} + + #local + Destroyable :: interface (t: $T) { + { T.destroy(&t) } -> void; + } + + #overload #order 1000 + delete :: macro (x: &$T/Destroyable) { + x_ := x; + T.destroy(x_); + cfree(x_); + } + + #local + IsNotDoublePointer :: interface (t: $T) { + #not **t; + } + + #overload #order 1001 + delete :: macro (x: &$T/core.intrinsics.types.type_is_simple) + where IsNotDoublePointer(&T) + { + cfree(x); + } } -- 2.25.1