From: Brendan Hansen Date: Thu, 9 Mar 2023 22:32:27 +0000 (-0600) Subject: added: sensible overloads for `delete` X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=09d96082dabd829dc0355fce254a3b713c858d40;p=onyx.git added: sensible overloads for `delete` --- 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); + } }