aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/value.c
diff options
context:
space:
mode:
authorGravatar Tom Willemse2021-09-06 02:03:31 -0700
committerGravatar Tom Willemse2021-09-06 02:03:31 -0700
commitc10cbcdf99824bf81fb0874deb258d5c8c7cb22d (patch)
tree2872be7d0038f7b0f5a88a2e34875fd856e0101a /clox/src/value.c
parent6508cfd8fe55e03a587b2f72d3ffc901d7ada049 (diff)
downloadcrafting-interpreters-c10cbcdf99824bf81fb0874deb258d5c8c7cb22d.tar.gz
crafting-interpreters-c10cbcdf99824bf81fb0874deb258d5c8c7cb22d.zip
Chapter 18
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 */
+ }
+}