From fe4c9bd487cb9ae59d86dc7680855c5797ae04e3 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 29 Sep 2026 18:59:42 -0400 Subject: pit: Add pit_value_sort_or_heavy_sort --- pit/src/runtime/value.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'pit/src/runtime/value.c') diff --git a/pit/src/runtime/value.c b/pit/src/runtime/value.c index 154e6a1..4de7402 100644 --- a/pit/src/runtime/value.c +++ b/pit/src/runtime/value.c @@ -11,6 +11,22 @@ const i64 PIT__SORT_FUNC = PIT_VALUE_SORT_REF + PIT_VALUE_HEAVY_SORT_FUNC; const i64 PIT__SORT_NATIVEFUNC = PIT_VALUE_SORT_REF + PIT_VALUE_HEAVY_SORT_NATIVEFUNC; const i64 PIT__SORT_NATIVEDATA = PIT_VALUE_SORT_REF + PIT_VALUE_HEAVY_SORT_NATIVEDATA; +i64 pit_value_sort_or_heavy_sort(pit_runtime *rt, pit_value v) { + switch (pit_value_sort(v)) { + case PIT_VALUE_SORT_DOUBLE: return PIT__SORT_DOUBLE; + case PIT_VALUE_SORT_INTEGER: return PIT__SORT_INTEGER; + case PIT_VALUE_SORT_SYMBOL: return PIT__SORT_SYMBOL; + case PIT_VALUE_SORT_REF: { + pit_ref r = pit_value_as_ref(rt, v); + if (r < 0) return -1; + pit_value_heavy *h = pit_value_ref_deref(rt, r); + if (!h) return -1; + return PIT_VALUE_SORT_REF + h->hsort; + } + default: return -1; + } +} + pit_value pit_value_new(pit_runtime *rt, enum pit_value_sort s, u64 data) { if (s == PIT_VALUE_SORT_DOUBLE) { /* if (((data >> 52) & 0b011111111111) == 0b011111111111 && ((data >> 51) & 0b1) == 0) { */ -- cgit v1.3.1