aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode/objects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode/objects.h')
-rwxr-xr-xsrc/bytecode/objects.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h
index 17809d5..fc5e069 100755
--- a/src/bytecode/objects.h
+++ b/src/bytecode/objects.h
@@ -121,4 +121,42 @@ display(Object obj) {
121 return; 121 return;
122} 122}
123 123
124void
125object_free(Object obj) {
126 if (IS_STRING(obj) || IS_SYMBOL(obj)) {
127 array_free(obj.text);
128 }
129}
130
131bool
132object_equal(Object a, Object b) {
133 if (a.type != b.type) {
134 return false;
135 }
136 switch (a.type) {
137 case OBJ_TYPE_TRUE:
138 case OBJ_TYPE_FALSE: {
139 return true;
140 } break;
141 case OBJ_TYPE_FIXNUM: {
142 return a.fixnum == b.fixnum;
143 } break;
144 case OBJ_TYPE_SYMBOL:
145 case OBJ_TYPE_STRING: {
146 if (array_size(a.text) != array_size(b.text)) {
147 return false;
148 }
149 for (size_t i = 0; i < array_size(a.text); i++) {
150 if (a.text[i] != b.text[i]) {
151 return false;
152 }
153 }
154 } break;
155 default: {
156 return false;
157 } break;
158 }
159 return true;
160}
161
124#endif // BDL_OBJECTS_H 162#endif // BDL_OBJECTS_H