aboutsummaryrefslogtreecommitdiff
path: root/src/stage1/analyze.cpp
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2020-12-28 00:55:44 +0200
committerGitHub <noreply@github.com>2020-12-28 00:55:44 +0200
commitd96f5b38a3d56c87f06ae301e9113ef28529e86e (patch)
treedc707cbea555c2c9bda71459ba2f6c95bae99aeb /src/stage1/analyze.cpp
parent5acfaa35d3320c7595262b4d97ba4cdc3a1afc7b (diff)
parent795770bcb489c8bb1a042bcfd9070dd6a77e0057 (diff)
downloadzig-d96f5b38a3d56c87f06ae301e9113ef28529e86e.tar.gz
zig-d96f5b38a3d56c87f06ae301e9113ef28529e86e.zip
Merge pull request #7556 from Vexu/translate-c
some fixes
Diffstat (limited to 'src/stage1/analyze.cpp')
-rw-r--r--src/stage1/analyze.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp
index fd82a30ce0..5f86321e9d 100644
--- a/src/stage1/analyze.cpp
+++ b/src/stage1/analyze.cpp
@@ -7232,13 +7232,13 @@ bool const_values_equal(CodeGen *g, ZigValue *a, ZigValue *b) {
}
return true;
case ZigTypeIdFnFrame:
- zig_panic("TODO");
+ zig_panic("TODO: const_values_equal ZigTypeIdFnFrame");
case ZigTypeIdAnyFrame:
- zig_panic("TODO");
+ zig_panic("TODO: const_values_equal ZigTypeIdAnyFrame");
case ZigTypeIdUndefined:
- zig_panic("TODO");
+ zig_panic("TODO: const_values_equal ZigTypeIdUndefined");
case ZigTypeIdNull:
- zig_panic("TODO");
+ zig_panic("TODO: const_values_equal ZigTypeIdNull");
case ZigTypeIdOptional:
if (get_src_ptr_type(a->type) != nullptr)
return const_values_equal_ptr(a, b);
@@ -7247,8 +7247,16 @@ bool const_values_equal(CodeGen *g, ZigValue *a, ZigValue *b) {
} else {
return const_values_equal(g, a->data.x_optional, b->data.x_optional);
}
- case ZigTypeIdErrorUnion:
- zig_panic("TODO");
+ case ZigTypeIdErrorUnion: {
+ bool a_is_err = a->data.x_err_union.error_set->data.x_err_set != nullptr;
+ bool b_is_err = b->data.x_err_union.error_set->data.x_err_set != nullptr;
+ if (a_is_err != b_is_err) return false;
+ if (a_is_err) {
+ return const_values_equal(g, a->data.x_err_union.error_set, b->data.x_err_union.error_set);
+ } else {
+ return const_values_equal(g, a->data.x_err_union.payload, b->data.x_err_union.payload);
+ }
+ }
case ZigTypeIdBoundFn:
case ZigTypeIdInvalid:
case ZigTypeIdUnreachable: