diff options
Diffstat (limited to 'src/bytecode/objects.h')
-rwxr-xr-x | src/bytecode/objects.h | 38 |
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 | ||
124 | void | ||
125 | object_free(Object obj) { | ||
126 | if (IS_STRING(obj) || IS_SYMBOL(obj)) { | ||
127 | array_free(obj.text); | ||
128 | } | ||
129 | } | ||
130 | |||
131 | bool | ||
132 | object_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 |