From 795770bcb489c8bb1a042bcfd9070dd6a77e0057 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sat, 26 Dec 2020 13:29:48 +0200 Subject: stage1: const_values_equal error union, improve remaining "TODO" panics --- src/stage1/analyze.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/stage1/analyze.cpp') 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: -- cgit v1.2.3