| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /**
- ******************************************************************************
- * @file : value.h
- * @author : simon
- * @brief : 常量 support only double-precision, floating-point numbers
- * @attention : None
- * @date : 2023/8/16
- ******************************************************************************
- */
- #ifndef CLOX__VALUE_H_
- #define CLOX__VALUE_H_
- #include "common.h"
- 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(vale) ((Value){VAL_BOOL, {.boolean = value}})
- #define NIL_VAL(vale) ((Value){VAL_NIL, {.number = 0}})
- #define NUMBER_VAL(value) ((Value){VAL_NUMBER, {.number = value}})
- /// \brief 常量池
- typedef struct {
- int capacity;
- int count;
- Value *values;
- } ValueArray;
- void initValueArray(ValueArray *array);
- void writeValueArray(ValueArray *array, Value value);
- void freeValueArray(ValueArray *array);
- void printValue(Value value);
- #endif //CLOX__VALUE_H_
|