diff options
Diffstat (limited to 'clox/src/value.c')
-rw-r--r-- | clox/src/value.c | 19 |
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 } |