aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/value.c
diff options
context:
space:
mode:
Diffstat (limited to 'clox/src/value.c')
-rw-r--r--clox/src/value.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/clox/src/value.c b/clox/src/value.c
index 0737999..34e55b8 100644
--- a/clox/src/value.c
+++ b/clox/src/value.c
@@ -26,4 +26,31 @@ void freeValueArray(ValueArray *array) {
initValueArray(array);
}
-void printValue(Value value) { printf("%g", AS_NUMBER(value)); }
+void printValue(Value value) {
+ switch (value.type) {
+ case VAL_BOOL:
+ printf(AS_BOOL(value) ? "true" : "false");
+ break;
+ case VAL_NIL:
+ printf("nil");
+ break;
+ case VAL_NUMBER:
+ printf("%g", AS_NUMBER(value));
+ break;
+ }
+}
+
+bool valuesEqual(Value a, Value b) {
+ if (a.type != b.type)
+ return false;
+ switch (a.type) {
+ case VAL_BOOL:
+ return AS_BOOL(a) == AS_BOOL(b);
+ case VAL_NIL:
+ return true;
+ case VAL_NUMBER:
+ return AS_NUMBER(a) == AS_NUMBER(b);
+ default:
+ return false; /* Unreachable */
+ }
+}