value.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /**
  2. ******************************************************************************
  3. * @file : value.h
  4. * @author : simon
  5. * @brief : 常量 support only double-precision, floating-point numbers
  6. * @attention : None
  7. * @date : 2023/8/16
  8. ******************************************************************************
  9. */
  10. #ifndef CLOX__VALUE_H_
  11. #define CLOX__VALUE_H_
  12. #include "common.h"
  13. typedef enum {
  14. VAL_BOOL,
  15. VAL_NIL,
  16. VAL_NUMBER,
  17. } ValueType;
  18. typedef struct {
  19. ValueType type;
  20. union {
  21. bool boolean;
  22. double number;
  23. } as;
  24. } Value;
  25. #define IS_BOOL(value) ((value).type == VAL_BOOL)
  26. #define IS_NIL(value) ((value).type == VAL_NIL)
  27. #define IS_NUMBER(value) ((value).type == VAL_NUMBER)
  28. #define AS_BOOL(value) ((value).as.boolean)
  29. #define AS_NUMBER(value) ((value).as.number)
  30. #define BOOL_VAL(vale) ((Value){VAL_BOOL, {.boolean = value}})
  31. #define NIL_VAL(vale) ((Value){VAL_NIL, {.number = 0}})
  32. #define NUMBER_VAL(value) ((Value){VAL_NUMBER, {.number = value}})
  33. /// \brief 常量池
  34. typedef struct {
  35. int capacity;
  36. int count;
  37. Value *values;
  38. } ValueArray;
  39. void initValueArray(ValueArray *array);
  40. void writeValueArray(ValueArray *array, Value value);
  41. void freeValueArray(ValueArray *array);
  42. void printValue(Value value);
  43. #endif //CLOX__VALUE_H_