Implement ...where .Self impls... (#5238)

* Also remove facet type deduction, since we decided against it on
[2025-04-02](https://docs.google.com/document/d/1Iut5f2TQBrtBNIduF4vJYOKfw7MbS8xH_J01_Q4e6Rk/edit?pli=1&resourcekey=0-mc_vh5UzrzXfU4kO-3tOjA&tab=t.0#heading=h.95phmuvxog9n).

---------

Co-authored-by: Josh L <josh11b@users.noreply.github.com>
Co-authored-by: Dana Jansens <danakj@orodu.net>
This commit is contained in:
josh11b
2025-04-07 20:45:45 +00:00
committed by GitHub
co-authored by Josh L Dana Jansens
parent 87f0e9723f
commit 4af0c8f8d1
27 changed files with 1409 additions and 399 deletions
@@ -54,7 +54,7 @@ let U: (type where .Self impls type).missing = {};
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %type_where: type = facet_type <type where TODO> [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -68,7 +68,7 @@ let U: (type where .Self impls type).missing = {};
// CHECK:STDOUT: %.1: <error> = splice_block <error> [concrete = <error>] {
// CHECK:STDOUT: %.Self: type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %.Self.ref: type = name_ref .Self, %.Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %.loc8: type = where_expr %.Self [concrete = constants.%type_where] {
// CHECK:STDOUT: %.loc8: type = where_expr %.Self [concrete = constants.%type] {
// CHECK:STDOUT: requirement_impls %.Self.ref, type
// CHECK:STDOUT: }
// CHECK:STDOUT: %missing.ref: <error> = name_ref missing, <error> [concrete = <error>]