36 lines
789 B
C
36 lines
789 B
C
#pragma once
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "kuroko.h"
|
|
#include "value.h"
|
|
|
|
#define OBJECT_TYPE(value) (AS_OBJECT(value)->type)
|
|
#define IS_STRING(value) isObjType(value, OBJ_STRING)
|
|
#define AS_STRING(value) ((KrkString *)AS_OBJECT(value))
|
|
#define AS_CSTRING(value) (((KrkString *)AS_OBJECT(value))->chars)
|
|
|
|
typedef enum {
|
|
OBJ_STRING,
|
|
} ObjType;
|
|
|
|
struct Obj {
|
|
ObjType type;
|
|
struct Obj * next;
|
|
};
|
|
|
|
struct ObjString {
|
|
KrkObj obj;
|
|
size_t length;
|
|
char * chars;
|
|
uint32_t hash;
|
|
};
|
|
|
|
static inline int isObjType(KrkValue value, ObjType type) {
|
|
return IS_OBJECT(value) && AS_OBJECT(value)->type == type;
|
|
}
|
|
|
|
extern KrkString * takeString(char * chars, size_t length);
|
|
extern KrkString * copyString(const char * chars, size_t length);
|
|
extern void krk_printObject(FILE * f, KrkValue value);
|