From f4185577e56a893b9375bc94d71bef5f9eb51891 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Fri, 12 Aug 2022 23:18:02 -0700 Subject: Chapter 27.3 --- clox/src/object.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'clox/src/object.h') diff --git a/clox/src/object.h b/clox/src/object.h index 44de6ed..1cef631 100644 --- a/clox/src/object.h +++ b/clox/src/object.h @@ -3,6 +3,7 @@ #include "chunk.h" #include "common.h" +#include "table.h" #include "value.h" #define OBJ_TYPE(value) (AS_OBJ(value)->type) @@ -10,12 +11,14 @@ #define IS_CLASS(value) isObjType(value, OBJ_CLASS) #define IS_CLOSURE(value) isObjType(value, OBJ_CLOSURE) #define IS_FUNCTION(value) isObjType(value, OBJ_FUNCTION) +#define IS_INSTANCE(value) isObjType(value, OBJ_INSTANCE) #define IS_NATIVE(value) isObjType(value, OBJ_NATIVE) #define IS_STRING(value) isObjType(value, OBJ_STRING) #define AS_CLASS(value) ((ObjClass *)AS_OBJ(value)) #define AS_CLOSURE(value) ((ObjClosure *)AS_OBJ(value)) #define AS_FUNCTION(value) ((ObjFunction *)AS_OBJ(value)) +#define AS_INSTANCE(value) ((ObjInstance *)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) @@ -24,6 +27,7 @@ typedef enum { OBJ_CLASS, OBJ_CLOSURE, OBJ_FUNCTION, + OBJ_INSTANCE, OBJ_NATIVE, OBJ_STRING, OBJ_UPVALUE, @@ -76,9 +80,16 @@ typedef struct { ObjString *name; } ObjClass; +typedef struct { + Obj obj; + ObjClass *klass; + Table fields; +} ObjInstance; + ObjClass *newClass(ObjString *name); ObjClosure *newClosure(ObjFunction *function); ObjFunction *newFunction(); +ObjInstance *newInstance(ObjClass *klass); ObjNative *newNative(NativeFn function); ObjString *takeString(char *chars, int length); ObjString *copyString(const char *chars, int length); -- cgit v1.2.3-54-g00ecf