diff options
| author | LLLL Colonq <llll@colonq> | 2026-09-29 18:59:42 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-09-29 18:59:42 -0400 |
| commit | fe4c9bd487cb9ae59d86dc7680855c5797ae04e3 (patch) | |
| tree | a9e268016ac063f3dd2f7317d63674994698d8bc /pit/src/runtime | |
| parent | 30bd399aed4c91e4d43cd5a911e7f3eafbcb4649 (diff) | |
pit: Add pit_value_sort_or_heavy_sort
Diffstat (limited to 'pit/src/runtime')
| -rw-r--r-- | pit/src/runtime/value.c | 16 |
1 files changed, 16 insertions, 0 deletions
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) { */ |
