summaryrefslogtreecommitdiff
path: root/pit/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'pit/src/runtime')
-rw-r--r--pit/src/runtime/value.c16
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) { */