aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/value.c
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-08-15 12:17:15 -0700
committerGravatar Tom Willemse2022-08-15 12:17:15 -0700
commit9080455fae1ce1625d41f5d1f20c5a0448934085 (patch)
tree1dea8d59fa44acaf4c53c60285aa9546cc20966e /clox/src/value.c
parentb30eb232f69c7cb48ce20b353f9575c4632209b6 (diff)
downloadcrafting-interpreters-master.tar.gz
crafting-interpreters-master.zip
Chapter 30.3HEADmaster
Diffstat (limited to 'clox/src/value.c')
-rw-r--r--clox/src/value.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/clox/src/value.c b/clox/src/value.c
index e442181..8b6cb56 100644
--- a/clox/src/value.c
+++ b/clox/src/value.c
@@ -29,6 +29,17 @@ void freeValueArray(ValueArray *array) {
}
void printValue(Value value) {
+#ifdef NAN_BOXING
+ if (IS_BOOL(value)) {
+ printf(AS_BOOL(value) ? "true" : "false");
+ } else if (IS_NIL(value)) {
+ printf("nil");
+ } else if (IS_NUMBER(value)) {
+ printf("%g", AS_NUMBER(value));
+ } else if (IS_OBJ(value)) {
+ printObject(value);
+ }
+#else
switch (value.type) {
case VAL_BOOL:
printf(AS_BOOL(value) ? "true" : "false");
@@ -43,9 +54,16 @@ void printValue(Value value) {
printObject(value);
break;
}
+#endif // NAN_BOXING
}
bool valuesEqual(Value a, Value b) {
+#ifdef NAN_BOXING
+ if (IS_NUMBER(a) && IS_NUMBER(b)) {
+ return AS_NUMBER(a) == AS_NUMBER(b);
+ }
+ return a == b;
+#else
if (a.type != b.type)
return false;
switch (a.type) {
@@ -61,4 +79,5 @@ bool valuesEqual(Value a, Value b) {
default:
return false; /* Unreachable */
}
+#endif // NAN_BOXING
}