diff options
author | Tom Willemse | 2022-03-23 17:00:22 -0700 |
---|---|---|
committer | Tom Willemse | 2022-03-23 17:00:22 -0700 |
commit | 1ae50814d3c7fc75fe02f7ce53497cb17f8114ff (patch) | |
tree | d54dbf36a1fd0bbd9855482843e812ecc06e2009 /clox/src/object.h | |
parent | 3da4016d5784adef217fff0ad1e3a0ceff76290f (diff) | |
download | crafting-interpreters-1ae50814d3c7fc75fe02f7ce53497cb17f8114ff.tar.gz crafting-interpreters-1ae50814d3c7fc75fe02f7ce53497cb17f8114ff.zip |
Chapter 25.1
Diffstat (limited to 'clox/src/object.h')
-rw-r--r-- | clox/src/object.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clox/src/object.h b/clox/src/object.h index b5942d6..54faf5b 100644 --- a/clox/src/object.h +++ b/clox/src/object.h @@ -7,16 +7,19 @@ #define OBJ_TYPE(value) (AS_OBJ(value)->type) +#define IS_CLOSURE(value) isObjType(value, OBJ_CLOSURE) #define IS_FUNCTION(value) isObjType(value, OBJ_FUNCTION) #define IS_NATIVE(value) isObjType(value, OBJ_NATIVE) #define IS_STRING(value) isObjType(value, OBJ_STRING) +#define AS_CLOSURE(value) ((ObjClosure *)AS_OBJ(value)) #define AS_FUNCTION(value) ((ObjFunction *)AS_OBJ(value)) #define AS_NATIVE(value) (((ObjNative *)AS_OBJ(value))->function) #define AS_STRING(value) ((ObjString *)AS_OBJ(value)) #define AS_CSTRING(value) (((ObjString *)AS_OBJ(value))->chars) typedef enum { + OBJ_CLOSURE, OBJ_FUNCTION, OBJ_NATIVE, OBJ_STRING, @@ -48,6 +51,12 @@ struct ObjString { uint32_t hash; }; +typedef struct { + Obj obj; + ObjFunction *function; +} ObjClosure; + +ObjClosure *newClosure(ObjFunction *function); ObjFunction *newFunction(); ObjNative *newNative(NativeFn function); ObjString *takeString(char *chars, int length); |