# compiler: namespace type equivalence based on AST node \+ captures · gitcafe/zig

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

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

Visibility: public

Requested revision: d0c022f7347b5cda34751a986a535aee3b1f45dc

Requested commit: d0c022f7347b5cda34751a986a535aee3b1f45dc

Commit: d0c022f7347b5cda34751a986a535aee3b1f45dc

Tree: 40a178dcd2b152a7fe26977b94d636d93debf52c

Author: mlugg

Committer: mlugg

## Message

```
compiler: namespace type equivalence based on AST node + captures

This implements the accepted proposal #18816. Namespace-owning types
(struct, enum, union, opaque) are no longer unique whenever analysed;
instead, their identity is determined based on their AST node and the
set of values they capture.

Reified types (`@Type`) are deduplicated based on the structure of the
type created. For instance, if two structs are created by the same
reification with identical fields, layout, etc, they will be the same
type.

This commit does not produce a working compiler; the next commit, adding
captures for decl references, is necessary. It felt appropriate to split
this up.

Resolves: #18816

```

## Parents

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

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