# stage2: fix hashing and comparison design flaw with Value · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/507dc1f2e7fac212e79f152e557cbec98a3c30e9)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 507dc1f2e7fac212e79f152e557cbec98a3c30e9

Requested commit: 507dc1f2e7fac212e79f152e557cbec98a3c30e9

Commit: 507dc1f2e7fac212e79f152e557cbec98a3c30e9

Tree: 34b057caf8ebadef2d199af39b1b44fca48c1a23

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: fix hashing and comparison design flaw with Value

 * `Value.toType` accepts a buffer parameter instead of an allocator
   parameter and can no longer fail.
 * Module: remove the unused `mod: *Module` parameter from various
   functions.
 * `Value.compare` now accepts a `Type` parameter which indicates the
   type of both operands. There is also a `Value.compareHetero` which
   accepts only Value parameters and supports comparing mixed types.
   Likewise, `Value.eql` requires a `Type` parameter.
 * `Value.hash` is removed; instead the hash map context structs now
   have a `ty: Type` field, and the hash function lives there, where it
   has access to a Value's Type when it computes a hash.
   - This allowed the hash function to be greatly simplified and sound
     in the sense that the same Values, even with different
     representations, always hash to the same thing.
 * Sema: Fix source location of zirCmp when an operand is runtime known
   but needs to be comptime known.
 * Remove unused target parameter from `Value.floatCast`.

```

## Parents

- [84039a57e4684e8df10e657bb76c6acb3fb89238](https://git.cafe/gitcafe/zig/commit/84039a57e4684e8df10e657bb76c6acb3fb89238?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/507dc1f2e7fac212e79f152e557cbec98a3c30e9?format=markdown)
