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.
This commit is contained in:
Andrew Kelley
2022-02-28 20:05:21 -07:00
parent 157f66ec07
commit d5131e91eb
3 changed files with 249 additions and 61 deletions

View File

@@ -157,8 +157,8 @@ const MonomorphedFuncsContext = struct {
// The generic function Decl is guaranteed to be the first dependency
// of each of its instantiations.
const generic_owner_decl = key.owner_decl.dependencies.keys()[0];
const generic_func = generic_owner_decl.val.castTag(.function).?.data;
std.hash.autoHash(&hasher, @ptrToInt(generic_func));
const generic_func: *const Fn = generic_owner_decl.val.castTag(.function).?.data;
std.hash.autoHash(&hasher, generic_func);
// This logic must be kept in sync with the logic in `analyzeCall` that
// computes the hash.