aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorJimmi HC <jhc@liab.dk>2018-06-28 10:34:37 +0200
committerJimmi HC <jhc@liab.dk>2018-06-28 10:34:37 +0200
commit3ec38b249446d1a51391e263fbb8303af52e6751 (patch)
tree842a7aa2b75f36c02f555344d7ea399a864b170e /src/analyze.cpp
parent3290e728339e49765b1adda78f173befb9fc12bf (diff)
downloadzig-3ec38b249446d1a51391e263fbb8303af52e6751.tar.gz
zig-3ec38b249446d1a51391e263fbb8303af52e6751.zip
Implement const_values_equal for array type
* This allows arrays to be passed by value at comptime
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 5160a19e81..e9b74a9c26 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -5458,8 +5458,19 @@ bool const_values_equal(ConstExprValue *a, ConstExprValue *b) {
case TypeTableEntryIdPointer:
case TypeTableEntryIdFn:
return const_values_equal_ptr(a, b);
- case TypeTableEntryIdArray:
- zig_panic("TODO");
+ case TypeTableEntryIdArray: {
+ assert(a->type->data.array.len == b->type->data.array.len);
+ size_t len = a->type->data.array.len;
+ ConstExprValue *a_elems = a->data.x_array.s_none.elements;
+ ConstExprValue *b_elems = b->data.x_array.s_none.elements;
+
+ for (size_t i = 0; i < len; ++i) {
+ if (!const_values_equal(&a_elems[i], &b_elems[i]))
+ return false;
+ }
+
+ return true;
+ }
case TypeTableEntryIdStruct:
for (size_t i = 0; i < a->type->data.structure.src_field_count; i += 1) {
ConstExprValue *field_a = &a->data.x_struct.fields[i];