mlugg a6ca20b9a1
compiler: change representation of closures
This changes the representation of closures in Zir and Sema. Rather than
a pair of instructions `closure_capture` and `closure_get`, the system
now works as follows:

* Each ZIR type declaration (`struct_decl` etc) contains a list of
  captures in the form of ZIR indices (or, for efficiency, direct
  references to parent captures). This is an ordered list; indexes into
  it are used to refer to captured values.
* The `extended(closure_get)` ZIR instruction refers to a value in this
  list via a 16-bit index (limiting this index to 16 bits allows us to
  store this in `extended`).
* `Module.Namespace` has a new field `captures` which contains the list
  of values captured in a given namespace. This is initialized based on
  the ZIR capture list whenever a type declaration is analyzed.

This change eliminates `CaptureScope` from semantic analysis, which is a
nice simplification; but the main motivation here is that this change is
a prerequisite for #18816.
2024-03-06 21:26:37 +00:00
..
2024-02-23 02:37:11 -07:00
2023-11-22 13:24:27 -05:00
2023-11-22 19:08:55 -07:00
2024-02-25 19:12:08 -08:00
2023-10-23 22:42:18 -04:00
2024-02-12 05:25:07 +01:00
2024-02-05 11:55:14 +03:30
2024-03-01 17:42:54 -08:00
2023-10-25 04:28:30 -04:00
2024-02-09 14:02:57 -08:00
2024-01-24 12:48:12 +01:00
2023-11-03 23:18:21 -04:00
2024-02-28 04:30:49 +01:00
2024-02-01 15:22:36 +02:00
2024-02-08 15:39:28 +01:00
2024-02-26 21:35:33 -07:00
2024-02-25 11:22:10 +01:00
2024-02-26 20:11:43 -08:00
2023-10-21 21:24:55 +00:00