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.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
}