aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/objects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode/objects.h')
-rwxr-xr-xsrc/bytecode/objects.h39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h
index 35a954f..17809d5 100755
--- a/src/bytecode/objects.h
+++ b/src/bytecode/objects.h
@@ -1,6 +1,9 @@
1#ifndef BDL_OBJECTS_H 1#ifndef BDL_OBJECTS_H
2#define BDL_OBJECTS_H 2#define BDL_OBJECTS_H
3 3
4#include "string_view.h"
5#include "darray.h"
6
4typedef enum ObjectType { 7typedef enum ObjectType {
5 OBJ_TYPE_NIL, 8 OBJ_TYPE_NIL,
6 OBJ_TYPE_TRUE, 9 OBJ_TYPE_TRUE,
@@ -24,9 +27,9 @@ typedef struct Object {
24 27
25 // OBJ_TYPE_STRING 28 // OBJ_TYPE_STRING
26 // OBJ_TYPE_SYMBOL 29 // OBJ_TYPE_SYMBOL
27 // struct { 30 struct {
28 // char *text; 31 char *text;
29 // }; 32 };
30 33
31 // OBJ_TYPE_PAIR 34 // OBJ_TYPE_PAIR
32 // struct { 35 // struct {
@@ -59,6 +62,28 @@ void display(Object obj);
59#define IS_TRUE(VAL) ((VAL).type != OBJ_TYPE_FALSE) 62#define IS_TRUE(VAL) ((VAL).type != OBJ_TYPE_FALSE)
60#define IS_FALSE(VAL) ((VAL).type == OBJ_TYPE_FALSE) 63#define IS_FALSE(VAL) ((VAL).type == OBJ_TYPE_FALSE)
61#define IS_FIXNUM(VAL) ((VAL).type == OBJ_TYPE_FIXNUM) 64#define IS_FIXNUM(VAL) ((VAL).type == OBJ_TYPE_FIXNUM)
65#define IS_STRING(VAL) ((VAL).type == OBJ_TYPE_STRING)
66#define IS_SYMBOL(VAL) ((VAL).type == OBJ_TYPE_SYMBOL)
67
68Object make_string(StringView sv) {
69 Object obj = {
70 .type = OBJ_TYPE_STRING,
71 .text = NULL,
72 };
73 array_init(obj.text, sv.n);
74 array_insert(obj.text, sv.start, sv.n);
75 return obj;
76}
77
78Object make_symbol(StringView sv) {
79 Object obj = {
80 .type = OBJ_TYPE_SYMBOL,
81 .text = NULL,
82 };
83 array_init(obj.text, sv.n);
84 array_insert(obj.text, sv.start, sv.n);
85 return obj;
86}
62 87
63void 88void
64display(Object obj) { 89display(Object obj) {
@@ -67,19 +92,19 @@ display(Object obj) {
67 printf("%zd", obj.fixnum); 92 printf("%zd", obj.fixnum);
68 } break; 93 } break;
69 case OBJ_TYPE_TRUE: { 94 case OBJ_TYPE_TRUE: {
70 printf("true"); 95 printf("true");
71 } break; 96 } break;
72 case OBJ_TYPE_FALSE: { 97 case OBJ_TYPE_FALSE: {
73 printf("false"); 98 printf("false");
74 } break; 99 } break;
75 case OBJ_TYPE_NIL: { 100 case OBJ_TYPE_NIL: {
76 printf("()"); 101 printf("()");
77 } break; 102 } break;
78 case OBJ_TYPE_STRING: { 103 case OBJ_TYPE_STRING: {
79 // printf("\"%.*s\"", (int)array_size(obj.string), obj.string); 104 printf("\"%.*s\"", (int)array_size(obj.text), obj.text);
80 } break; 105 } break;
81 case OBJ_TYPE_SYMBOL: { 106 case OBJ_TYPE_SYMBOL: {
82 // printf(":%.*s", (int)array_size(obj.symbol), obj.symbol); 107 printf(":%.*s", (int)array_size(obj.text), obj.text);
83 } break; 108 } break;
84 case OBJ_TYPE_PAIR: { 109 case OBJ_TYPE_PAIR: {
85 // printf("("); 110 // printf("(");