| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /**
- ******************************************************************************
- * @file : object.h
- * @author : simon
- * @brief : None
- * @attention : None
- * @date : 2023/8/23
- ******************************************************************************
- */
- #ifndef CLOX_OBJECT_H
- #define CLOX_OBJECT_H
- #include "value.h"
- #define OBJ_TYPE(value) (AS_OBJ(value)->type)
- #define IS_STRING(value) isObjType(value, OBJ_STRING)
- #define AS_STRING(value) ((ObjString *) AS_OBJ(value))
- #define AS_CSTRING(value) (((ObjString *) AS_OBJ(value))->chars)
- typedef enum {
- OBJ_STRING,
- } ObjType;
- struct Obj {
- ObjType type;
- struct Obj *next;
- };
- struct ObjString {
- struct Obj obj;
- int length;
- char *chars;
- uint32_t hash;// 缓存 hash 值
- };
- ObjString *takeString(char *chars, int length);
- ObjString *copyString(const char *chars, int length);
- void printObject(Value value);
- static inline bool isObjType(Value value, ObjType type) {
- return IS_OBJ(value) && AS_OBJ(value)->type == type;
- }
- #endif//CLOX_OBJECT_H
|