diff options
Diffstat (limited to 'clox/src/value.h')
-rw-r--r-- | clox/src/value.h | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/clox/src/value.h b/clox/src/value.h index 86d4b1c..7478aaf 100644 --- a/clox/src/value.h +++ b/clox/src/value.h @@ -3,17 +3,40 @@ #include "common.h" -typedef double Value; +typedef enum { + VAL_BOOL, + VAL_NIL, + VAL_NUMBER, +} ValueType; + +typedef struct { + ValueType type; + union { + bool boolean; + double number; + } as; +} Value; + +#define IS_BOOL(value) ((value).type == VAL_BOOL) +#define IS_NIL(value) ((value).type == VAL_NIL) +#define IS_NUMBER(value) ((value).type == VAL_NUMBER) + +#define AS_BOOL(value) ((value).as.boolean) +#define AS_NUMBER(value) ((value).as.number) + +#define BOOL_VAL(value) ((Value){VAL_BOOL, {.boolean = value}}) +#define NIL_VAL ((Value){VAL_NIL, {.number = 0}}) +#define NUMBER_VAL(value) ((Value){VAL_NUMBER, {.number = value}}) typedef struct { int capacity; int count; - Value* values; + Value *values; } ValueArray; -void initValueArray(ValueArray* array); -void writeValueArray(ValueArray* array, Value value); -void freeValueArray(ValueArray* array); +void initValueArray(ValueArray *array); +void writeValueArray(ValueArray *array, Value value); +void freeValueArray(ValueArray *array); void printValue(Value value); #endif |