From d5131e91eba9324eda3a2ae47eb2aa4530c87e83 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 28 Feb 2022 20:05:21 -0700 Subject: Sema: complete the Type.hash function Similar to how Type.eql was reworked in the previous commit, this commit reworks Type.hash to check all the different kinds of tags that a Type can be represented with. It also completes the implementation for all types except error sets, which need to have Type.eql enhanced as well. --- src/value.zig | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/value.zig') diff --git a/src/value.zig b/src/value.zig index 51f678aaaa..a740a35b79 100644 --- a/src/value.zig +++ b/src/value.zig @@ -2040,9 +2040,19 @@ pub const Value = extern union { } const fields = ty.structFields().values(); if (fields.len == 0) return; - const field_values = val.castTag(.@"struct").?.data; - for (field_values) |field_val, i| { - field_val.hash(fields[i].ty, hasher); + switch (val.tag()) { + .empty_struct_value => { + for (fields) |field| { + field.default_val.hash(field.ty, hasher); + } + }, + .@"struct" => { + const field_values = val.castTag(.@"struct").?.data; + for (field_values) |field_val, i| { + field_val.hash(fields[i].ty, hasher); + } + }, + else => unreachable, } }, .Optional => { -- cgit v1.2.3