aboutsummaryrefslogtreecommitdiff
path: root/src/exact_value.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-02-22 22:59:00 +0000
committergingerBill <bill@gingerbill.org>2022-02-22 22:59:00 +0000
commit62d232d798fff25597b6e3591c6a178c32fa440e (patch)
tree9beeb2f1e8fe1b025f2726611d4e1404427ae452 /src/exact_value.cpp
parent8906a0120c5b94932097e4c3ee8f4f68f96770f2 (diff)
Correct `ExactValue_Pointer`
Diffstat (limited to 'src/exact_value.cpp')
-rw-r--r--src/exact_value.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/exact_value.cpp b/src/exact_value.cpp
index fd90278e5..3dae96853 100644
--- a/src/exact_value.cpp
+++ b/src/exact_value.cpp
@@ -630,6 +630,9 @@ void match_exact_values(ExactValue *x, ExactValue *y) {
case ExactValue_Bool:
case ExactValue_String:
case ExactValue_Quaternion:
+ case ExactValue_Pointer:
+ case ExactValue_Procedure:
+ case ExactValue_Typeid:
return;
case ExactValue_Integer:
@@ -671,9 +674,6 @@ void match_exact_values(ExactValue *x, ExactValue *y) {
return;
}
break;
-
- case ExactValue_Procedure:
- return;
}
compiler_error("match_exact_values: How'd you get here? Invalid ExactValueKind %d", x->kind);
@@ -932,6 +932,17 @@ bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) {
break;
}
+ case ExactValue_Pointer: {
+ switch (op) {
+ case Token_CmpEq: return x.value_pointer == y.value_pointer;
+ case Token_NotEq: return x.value_pointer != y.value_pointer;
+ case Token_Lt: return x.value_pointer < y.value_pointer;
+ case Token_LtEq: return x.value_pointer <= y.value_pointer;
+ case Token_Gt: return x.value_pointer > y.value_pointer;
+ case Token_GtEq: return x.value_pointer >= y.value_pointer;
+ }
+ }
+
case ExactValue_Typeid:
switch (op) {
case Token_CmpEq: return are_types_identical(x.value_typeid, y.value_typeid);