diff options
Diffstat (limited to 'val.h')
-rw-r--r-- | val.h | 27 |
1 files changed, 21 insertions, 6 deletions
@@ -41,6 +41,7 @@ bool val_equal(Val a, Val b); typedef enum { OTY_STRING, OTY_FUNC, + OTY_ARR, } ObjTy; typedef struct _obj { @@ -53,13 +54,8 @@ typedef struct { uint32_t hash; char *d; } ObjString; -#include "chunk.h" -typedef struct { - Obj obj; - Chunk ch; - uint8_t arity; -} ObjFunc; +#include "chunk.h" // Constructs a new objstring from the given C string, // creating its own fresh copy of the data. @@ -69,8 +65,25 @@ ObjString *objstring_copy_cstr(State *s, char *str); // taking ownership of the provided data. ObjString *objstring_take(State *S, char *src, size_t len); +typedef struct { + Obj obj; + Chunk ch; + uint8_t arity; +} ObjFunc; ObjFunc *objfunc_new(State *S, uint8_t arity); +typedef struct { + Obj obj; + size_t len; + size_t cap; + Val *d; +} ObjArr; + +ObjArr *objarr_new(State *S); +Val objarr_get(State *S, ObjArr *arr, size_t ix); +void objarr_append(State *S, ObjArr *arr, Val v); +void objarr_put(State *S, ObjArr *arr, size_t ix, Val v); + #define IS_NIL(x) (x.ty == TY_NIL) #define IS_NUM(x) (x.ty == TY_NUM) #define IS_BOOL(x) (x.ty == TY_BOOL) @@ -79,6 +92,7 @@ ObjFunc *objfunc_new(State *S, uint8_t arity); #define IS_STRING(x) (is_obj_ty((x), OTY_STRING)) #define IS_FUNC(x) (is_obj_ty((x), OTY_FUNC)) +#define IS_ARR(x) (is_obj_ty((x), OTY_ARR)) #define AS_NUM(x) (x.as.d) #define AS_BOOL(x) (x.as.b) @@ -88,6 +102,7 @@ ObjFunc *objfunc_new(State *S, uint8_t arity); #define AS_STRING(x) ((ObjString*)AS_OBJ(x)) #define AS_CSTRING(x) (AS_STRING(x)->d) #define AS_FUNC(x) ((ObjFunc*)AS_OBJ(x)) +#define AS_ARR(x) ((ObjArr*)AS_OBJ(x)) #define VAL_NIL ((Val){.ty=TY_NIL}) #define VAL_NUM(x) ((Val){.ty=TY_NUM, .as.d=(x) }) |