| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /**
- ******************************************************************************
- * @file : object.h
- * @author : simon
- * @brief : None
- * @attention : None
- * @date : 2023/8/23
- ******************************************************************************
- */
- #ifndef CLOX_OBJECT_H
- #define CLOX_OBJECT_H
- #include "chunk.h"
- #include "common.h"
- #include "value.h"
- #define OBJ_TYPE(value) (AS_OBJ(value)->type)
- #define IS_FUNCTION(value) isObjType(value, OBJ_FUNCTION);
- #define IS_STRING(value) isObjType(value, OBJ_STRING)
- #define AS_FUNCTION(value) ((ObjFunction *) AS_OBJ(value))
- #define AS_STRING(value) ((ObjString *) AS_OBJ(value))
- #define AS_CSTRING(value) (((ObjString *) AS_OBJ(value))->chars)
- typedef enum {
- OBJ_STRING,
- OBJ_FUNCTION,
- } ObjType;
- struct Obj {
- ObjType type;
- struct Obj *next;
- };
- typedef struct {
- struct Obj obj;
- int arity;// stores the number of parameters the function expects
- Chunk chunk;
- ObjString *name;
- } ObjFunction;
- struct ObjString {
- struct Obj obj;
- int length;
- char *chars;
- uint32_t hash;// 缓存 hash 值
- };
- ObjFunction *newFunction();
- 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
|