on master help sign in
Check explicit record projections

Reserve proj and infer supported result-directed field selections, retaining source and axes for later lowering. Reject unsupported width fits conservatively and cover binding scopes and module dependencies with golden and shared guards.

commit75f5952ed9971c60327808dbdb48ccb28a4c9e8f authoriko <mail@iko.soy> dateSat 31 Oct 2026, 07:03 (4 hours ago) parent0ea700d
109 files changed+2765−487
docs/compiler.md+2 docs/development.md+2 docs/status.md+8−6 jibb-dev/lib/jibb.hoon+357−40 tests/golden/types-proj-explicit-context/about.txt+4 tests/golden/types-proj-explicit-context/modules.txt+1 tests/golden/types-proj-explicit-context/source.jibb+35 tests/golden/types-proj-explicit-context/tokens.txt+626 tests/golden/types-proj-explicit-context/tree.txt+287 tests/golden/types-proj-explicit-context/types.txt+31 tests/golden/types-proj-nested-no-implicit/about.txt+4 tests/golden/types-proj-nested-no-implicit/modules.txt+1 tests/golden/types-proj-nested-no-implicit/source.jibb+6 tests/golden/types-proj-nested-no-implicit/tokens.txt+119 tests/golden/types-proj-nested-no-implicit/tree.txt+56 tests/golden/types-proj-nested-no-implicit/types.txt+7 tests/golden/types-proj-reserved-imported-definition/about.txt+4 tests/golden/types-proj-reserved-imported-definition/module-trees.txt+10 tests/golden/types-proj-reserved-imported-definition/modules.txt+1 tests/golden/types-proj-reserved-imported-definition/modules/ui/lib.jibb+2 tests/golden/types-proj-reserved-imported-definition/source.jibb+2 tests/golden/types-proj-reserved-imported-definition/tokens.txt+11 tests/golden/types-proj-reserved-imported-definition/tree.txt+3 tests/golden/types-proj-reserved-imported-definition/types.txt+2 tests/golden/types-proj-reserved-jibb-import/about.txt+4 tests/golden/types-proj-reserved-jibb-import/module-trees.txt+6 tests/golden/types-proj-reserved-jibb-import/modules.txt+1 tests/golden/types-proj-reserved-jibb-import/modules/ui/lib.jibb+1 tests/golden/types-proj-reserved-jibb-import/source.jibb+2 tests/golden/types-proj-reserved-jibb-import/tokens.txt+11 tests/golden/types-proj-reserved-jibb-import/tree.txt+3 tests/golden/types-proj-reserved-jibb-import/types.txt+2 tests/golden/types-proj-reserved-local-mold/about.txt+4 tests/golden/types-proj-reserved-local-mold/modules.txt+1 tests/golden/types-proj-reserved-local-mold/source.jibb+3 tests/golden/types-proj-reserved-local-mold/tokens.txt+10 tests/golden/types-proj-reserved-local-mold/tree.txt+5 tests/golden/types-proj-reserved-local-mold/types.txt+2 tests/golden/types-proj-reserved-local/about.txt+4 tests/golden/types-proj-reserved-local/modules.txt+1 tests/golden/types-proj-reserved-local/source.jibb+3 tests/golden/types-proj-reserved-local/tokens.txt+14 tests/golden/types-proj-reserved-local/tree.txt+8 tests/golden/types-proj-reserved-local/types.txt+2 tests/golden/types-proj-reserved-mark-import/about.txt+4 tests/golden/types-proj-reserved-mark-import/modules.txt+1 tests/golden/types-proj-reserved-mark-import/source.jibb+2 tests/golden/types-proj-reserved-mark-import/tokens.txt+7 tests/golden/types-proj-reserved-mark-import/tree.txt+3 tests/golden/types-proj-reserved-mark-import/types.txt+2 tests/golden/types-proj-reserved-mold/about.txt+4 tests/golden/types-proj-reserved-mold/modules.txt+1 tests/golden/types-proj-reserved-mold/source.jibb+2 tests/golden/types-proj-reserved-mold/tokens.txt+8 tests/golden/types-proj-reserved-mold/tree.txt+3 tests/golden/types-proj-reserved-mold/types.txt+2 tests/golden/types-proj-reserved-pattern/about.txt+4 tests/golden/types-proj-reserved-pattern/modules.txt+1 tests/golden/types-proj-reserved-pattern/source.jibb+3 tests/golden/types-proj-reserved-pattern/tokens.txt+21 tests/golden/types-proj-reserved-pattern/tree.txt+11 tests/golden/types-proj-reserved-pattern/types.txt+2 tests/golden/types-proj-reserved-positive/about.txt+4 tests/golden/types-proj-reserved-positive/modules.txt+1 tests/golden/types-proj-reserved-positive/source.jibb+8 tests/golden/types-proj-reserved-positive/tokens.txt+70 tests/golden/types-proj-reserved-positive/tree.txt+31 tests/golden/types-proj-reserved-positive/types.txt+7 tests/golden/types-proj-reserved-sample/about.txt+4 tests/golden/types-proj-reserved-sample/modules.txt+1 tests/golden/types-proj-reserved-sample/source.jibb+1 tests/golden/types-proj-reserved-sample/tokens.txt+8 tests/golden/types-proj-reserved-sample/tree.txt+5 tests/golden/types-proj-reserved-sample/types.txt+2 tests/golden/types-proj-reserved-sur-import/about.txt+4 tests/golden/types-proj-reserved-sur-import/modules.txt+1 tests/golden/types-proj-reserved-sur-import/source.jibb+2 tests/golden/types-proj-reserved-sur-import/tokens.txt+7 tests/golden/types-proj-reserved-sur-import/tree.txt+3 tests/golden/types-proj-reserved-sur-import/types.txt+2 tests/golden/types-proj-reserved-unused-pattern/about.txt+4 tests/golden/types-proj-reserved-unused-pattern/modules.txt+1 tests/golden/types-proj-reserved-unused-pattern/source.jibb+6 tests/golden/types-proj-reserved-unused-pattern/tokens.txt+38 tests/golden/types-proj-reserved-unused-pattern/tree.txt+18 tests/golden/types-proj-reserved-unused-pattern/types.txt+2 tests/golden/types-proj-reserved-unused-sample/about.txt+4 tests/golden/types-proj-reserved-unused-sample/modules.txt+1 tests/golden/types-proj-reserved-unused-sample/source.jibb+4 tests/golden/types-proj-reserved-unused-sample/tokens.txt+25 tests/golden/types-proj-reserved-unused-sample/tree.txt+12 tests/golden/types-proj-reserved-unused-sample/types.txt+2 tests/golden/types-proj-reserved-unused-value/about.txt+4 tests/golden/types-proj-reserved-unused-value/modules.txt+1 tests/golden/types-proj-reserved-unused-value/source.jibb+6 tests/golden/types-proj-reserved-unused-value/tokens.txt+31 tests/golden/types-proj-reserved-unused-value/tree.txt+15 tests/golden/types-proj-reserved-unused-value/types.txt+2 tests/golden/types-proj-reserved-value/about.txt+4 tests/golden/types-proj-reserved-value/modules.txt+1 tests/golden/types-proj-reserved-value/source.jibb+2 tests/golden/types-proj-reserved-value/tokens.txt+12 tests/golden/types-proj-reserved-value/tree.txt+6 tests/golden/types-proj-reserved-value/types.txt+2 tests/golden/types-tuple-context-nested/about.txt+1−1 tests/golden/types-tuple-context-nested/types.txt+1−7 tests/lib/jibb-proj-guards.hoon+85 tests/lib/jibb.hoon+533−433 tools/type-proj-guards-test+32
docs/compiler.md+2
@@ -111,6 +111,8 @@ And the design notes:
111111| 3. The parser | Why recursive descent (the grammar is LL(2) after the layout pass), the EBNF rule by rule with the node each gives, what the EBNF leaves out and how it's filled in, spacing, and where each error points, with its message |
112112| 4. Printed formats | The token, tree and error formats the golden files hold |
113113
114+The partial checker reserves `proj` in module, local, sample, pattern and import bindings, including bindings inside unsupported source; a field, tag or path segment may still have that spelling. With a known expected record type, it checks selected explicit `(proj record)` calls over closed, uniquely faced records, preserving the source expression, its type, the result type and field axes in the checked interface. Imported and private-prelude dependencies retain the source needed to lower those plans. The checker does not yet lower or execute them. It supports fields in their original order and result records with at least two named fields; reordered fields, one-field results, unknown or open record spines, some nested contexts and recursive groups with projections remain unsupported. A directional fit of a wider faced record fails closed instead of inserting a projection, including within supported list, unit and record positions. To limit repeated work, record-spine proofs are reused along the same closed spine and stop at 1,024 fields; field boundaries and the special handling of positional calls reset the appropriate proof. Prepared interfaces and their source remain trusted host inputs.
115+
114116## The tree
115117
116118Every node is `[%tag at=span …]`, so `+span-of` finds its span in one place; the few that aren't say so in the `%tree` chapter. The kinds of node:
docs/development.md+2
@@ -69,6 +69,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6969| `tools/type-hole-guards-test` | Runs the shared hole-defaulting and API interface guards under eval; the same checks run on the ship |
7070| `tools/type-list-alias-test` | Runs the shared prelude list-alias and provenance guards under eval and on the ship |
7171| `tools/type-qath-guards-test` | Runs source-provenance, recursive unfolding and face guards under eval and on the ship |
72+| `tools/type-proj-guards-test` | Runs projection evidence, name-scope and dependency guards under eval and on the ship |
7273| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
7374| `tools/clay-fixtures` | Syncs `my-app`, builds its example `/sur` files and marks through Clay, checks selected mold and mark projections and the partial checker, and records Ford and mark subject shapes on the fake ship |
7475| `tools/hoon` | Evaluates Hoon with the library in scope, as `tools/hoon '(golden /a/b/jibb (crip "++ main view"))'`; `--cord name=file` binds a file's text, `-f` reads the expression from a file |
@@ -94,6 +95,7 @@ tools/type-api-paths-test # partial API path analysis report matches
9495tools/type-hole-guards-test # hole defaulting and API guards pass
9596tools/type-list-alias-test # prelude list-alias guards pass
9697tools/type-qath-guards-test # qath source and unfolding guards pass
98+tools/type-proj-guards-test # projection evidence and scope guards pass
9799tools/type-module-scope-test # module/prelude scope golden report matches
98100tools/hoon check-spans-test # prints <<>>
99101tools/hoon itype-unify-test # type-unification controls pass
docs/status.md+8−6
@@ -21,7 +21,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
2121
2222The parser accepts `_` in mold positions and typed path segments, retaining each hole’s span. The partial checker tracks ordinary annotation holes through inference and requires each value or local definition to resolve its own holes before generalization. A hole can resolve to a concrete type or an explicitly written in-scope type variable; later uses cannot fix an unresolved definition. Independent decimal holes can default, but captured variables are not defaulted prematurely. Structural named molds with an unresolved hole report its site. Complex mold forms, inferred path segments, mutual recursive groups and other unsupported constraints still fail closed, and the fragment does not claim the module is checked. A syntax-tree pass rejects duplicate field names within each written record and reports both sites. The repository spec now records that `ask` and `qath` are transparent; `ask` remains outstanding.
2323
24−On 2026-10-31, @iko chose explicit, result-directed `(proj record)` to construct a record with exactly the expected fields, and reserved `proj` against definitions and imports. The repository spec records this change; projection-aware type checking and lowering are not implemented yet.
24+On 2026-10-31, @iko chose explicit, result-directed `(proj record)` to construct a record with exactly the expected fields, and reserved `proj` against definitions and imports. The partial checker handles selected explicit calls with known, closed record types, records field-selection evidence for later lowering, and reserves the name across source bindings. Reordered fields, one-field results, some nested contexts and several open or recursive cases remain unsupported; lowering and execution are not implemented yet. The field-order question remains open.
2525
2626The internal prelude also defines `qath` as a transparent recursive knot sequence, re-exported by the public prelude. The partial checker recognizes its source identity, supports selected null/cell construction and matching, and types static application-path literals. Other recursive shapes, broader patterns and dynamic application-path segments remain unsupported. A 256-step limit applies per inference attempt, not to parsing or retries; checking routes and static files remains milestone 4. `ask` is still unfinished.
2727
@@ -45,8 +45,8 @@ What the plan asks for, and where it is:
4545
4646Besides the plan's list:
4747
48−- 608 golden cases: 388 that parse and 220 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
49−- The 608-case corpus passed under `urbit eval` in 80.7 s while other checks were running. The fake ship passed all 621 tests, including the importer, importer/checker and mark/checker bridges, module scope, unification, hole and qath guards, with 49.9 s for sync and 65.2 s for tests. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
48+- 624 golden cases: 404 that parse and 220 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
49+- The 624-case corpus passed under `urbit eval` in 82.3 s while other checks were running. The fake ship passed all 638 tests, including the importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath and projection guards, with 53.5 s for sync and 38.0 s for tests. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
5050- `tools/testdata/selftest` (22 checks), `tools/testdata/ship-selftest` and `tools/testdata/clay-fixtures-selftest` test the tools themselves; the last checks temporary Clay fixture cleanup and signal handling without a ship.
5151- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
5252- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -127,14 +127,15 @@ Besides the plan's list:
127127| e3e184f | 2026-10-31 | Parse type holes, reject duplicate written record fields, and extend partial union inference and imports |
128128| 80e221a | 2026-10-31 | Infer supported annotation holes and prelude list aliases |
129129| ba1fec4 | 2026-10-31 | Add the curried `bond` prelude gate |
130−| This change | 2026-10-31 | Infer a source-defined recursive `qath` subset and record the explicit `proj` decision |
130+| 0ea700d | 2026-10-31 | Infer a source-defined recursive `qath` subset and record the explicit `proj` decision |
131+| This change | 2026-10-31 | Check a subset of explicit `proj` calls and retain their lowering evidence |
131132
132133## Checking it
133134
134135On a machine set up as [development.md](development.md) says:
135136
136137```
137−tools/golden # 608 cases under urbit eval
138+tools/golden # 624 cases under urbit eval
138139tools/importer-test # the Hoon importer fixture projection
139140tools/type-import-test # the importer/checker bridge fixture
140141tools/type-tlon-test # the real Tlon reader/checker fixture
@@ -144,13 +145,14 @@ tools/type-api-paths-test # partial API path metadata fixture
144145tools/type-hole-guards-test # hole defaulting and API interface guards
145146tools/type-list-alias-test # prelude list-alias guards
146147tools/type-qath-guards-test # qath source and unfolding guards
148+tools/type-proj-guards-test # projection evidence and scope guards
147149tools/type-module-scope-test # module and prelude scope fixture
148150tools/hoon check-spans-test # prints <<>> when the span checker works
149151tools/testdata/selftest # the tools themselves
150152tools/doc-blocks docs/spec # the doc's examples are golden cases
151153tools/ship start
152154tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
153−tools/ship test # the same 608 cases as -test arms on the ship
155+tools/ship test # the same 624 cases as -test arms on the ship
154156tools/testdata/ship-selftest
155157tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
156158tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb.hoon+357−40
@@ -4614,6 +4614,19 @@
46144614:: from their display name. Generic cases must be disjoint for all arguments.
46154615:: Unnamed union printing is informational; it is not Jibb syntax.
46164616::
4617+:: `proj` is a reserved, type-directed operation, not an ordinary gate.
4618+:: The supported fragment selects uniquely faced fields from a known record
4619+:: in source order (reordering is a doc question). It records the original
4620+:: call, source and target types, and source axes with its definition;
4621+:: checked module interfaces retain that evidence and their source, including
4622+:: the private prelude dependency. A later lowerer must replace the call by
4623+:: an inline gate applied to the operand once; no lowering is implemented yet.
4624+:: Ordinary fits never insert a projection. Unknown or variable-origin record
4625+:: spines, single-item targets, nested projected fields and projections in
4626+:: recursive groups remain unsupported. Directional fits bound faced-spine
4627+:: proofs to fewer than 1,024 cells; the projection planner has a separate
4628+:: 4,096-step bound. These are inference limits, not language limits.
4629+::
46174630+$ itype
46184631 $~ [%var 0]
46194632 $% [%var id=@ud]
@@ -5078,6 +5091,18 @@
50785091++ itype-fit
50795092 |= [actual=itype expected=itype sub=isub next=@ud]
50805093 ^- ifit
5094+ (itype-fit-inner actual expected sub next | |)
5095+++ itype-fit-inner
5096+ |= [actual=itype expected=itype sub=isub next=@ud skip-width=? spine-proof=?]
5097+ ^- ifit
5098+ ?: &(!skip-width ?=(%cell -.actual) ?=(%cell -.expected) |((width-spine-exhausted actual 1.024) (width-spine-exhausted expected 1.024)))
5099+ [%unknown ~]
5100+ =/ known=(unit [source=iwfields target=iwfields])
5101+ ?: skip-width ~
5102+ (width-known-shape actual expected sub)
5103+ =/ too-wide=? ?~(known | (gth (lent order.source.u.known) (lent order.target.u.known)))
5104+ ?: too-wide [%unknown ~]
5105+ =/ spine-checked=? |(spine-proof ?=(^ known))
50815106 =/ uncertain=?
50825107 |(?=(%var -.actual) ?=(%avar -.actual) ?=(%nvar -.actual) ?=(%var -.expected) ?=(%avar -.expected) ?=(%nvar -.expected))
50835108 =/ actual-open=?
@@ -5193,9 +5218,9 @@
51935218 ?: &((aura-prefix aura.actual aura.expected) uncertain) [%unknown ~]
51945219 [%bad ~]
51955220 ?: &(?=(%cell -.actual) ?=(%cell -.expected))
5196− =/ first=ifit $(actual hed.actual, expected hed.expected)
5221+ =/ first=ifit $(actual hed.actual, expected hed.expected, skip-width |, spine-proof |)
51975222 ?. ?=(%ok -.first) first
5198− $(actual tal.actual, expected tal.expected, sub sub.first, next next.first)
5223+ $(actual tal.actual, expected tal.expected, sub sub.first, next next.first, skip-width spine-checked, spine-proof spine-checked)
51995224 :: A field may add a face to an occurrence of the very same type
52005225 :: variable. Binding that variable to a face around itself would fail
52015226 :: the occurs check, but its underlying type has already matched.
@@ -5217,9 +5242,9 @@
52175242 [%ok u.unified next]
52185243 ?: &(?=(%face -.actual) ?=(%face -.expected))
52195244 ?. =(name.actual name.expected) [%bad ~]
5220− $(actual body.actual, expected body.expected)
5221− ?: ?=(%face -.actual) $(actual body.actual)
5222− ?: ?=(%face -.expected) $(expected body.expected)
5245+ $(actual body.actual, expected body.expected, skip-width |, spine-proof |)
5246+ ?: ?=(%face -.actual) $(actual body.actual, skip-width |, spine-proof |)
5247+ ?: ?=(%face -.expected) $(expected body.expected, skip-width |, spine-proof |)
52235248 ?: (itype-face-asym actual expected sub) [%unknown ~]
52245249 ?: |((itype-has-any-atom actual sub) (itype-has-any-atom expected sub))
52255250 [%unknown ~]
@@ -5296,7 +5321,9 @@
52965321+$ ienv (list [name=term scheme=ischeme])
52975322+$ imold-types (list [name=term template=ischeme])
52985323+$ iderived [name=term agent=term mark=term]
5299−+$ ifile [values=ienv molds=imold-types at=path derived=(list iderived)]
5324++$ iwidth-definition [name=term original=expr typ=itype sub=isub projections=(list iwprojection)]
5325++$ iwidth-dependency [at=path source=(unit @t) definitions=(list iwidth-definition)]
5326++$ ifile [values=ienv molds=imold-types at=path derived=(list iderived) elaborations=(list iwidth-definition) dependencies=(list iwidth-dependency) source=(unit @t)]
53005327+$ ijimports (list [face=term interface=ifile])
53015328+$ icap [name=@t id=@ud at=span]
53025329+$ icaps (list icap)
@@ -5312,7 +5339,94 @@
53125339:: Recursive-mold unfolding spends fuel in the threaded inference state.
53135340:: Retries can restart from an earlier state, so this bounds an attempt,
53145341:: not all parsing or module-checking work.
5315−+$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud]
5342+:: Experimental: only closed, uniquely faced records have known axes.
5343++$ iwfield [name=term axis=@ud typ=itype]
5344++$ iwfields [order=(list iwfield) index=(map term iwfield)]
5345++$ iwstep [name=term axis=@ud]
5346++$ iwidth-result [steps=(list iwstep) sub=isub next=@ud]
5347++$ iwprojection [at=span original=expr source=itype target=itype steps=(list iwstep)]
5348+++ width-scan
5349+ |= [typ=itype sub=isub axis=@ud fuel=@ud]
5350+ ^- (unit iwfields)
5351+ =/ order=(list iwfield) ~
5352+ =/ index=(map term iwfield) *(map term iwfield)
5353+ |-
5354+ ?: =(0 fuel) ~
5355+ ?: |(?=(%var -.typ) ?=(%avar -.typ) ?=(%nvar -.typ)) ~
5356+ ?: ?=(%face -.typ)
5357+ =/ entry=iwfield [name.typ axis body.typ]
5358+ ?: ?=(^ (~(get by index) name.entry)) ~
5359+ `[(flop [entry order]) (~(put by index) name.entry entry)]
5360+ ?. ?=(%cell -.typ) ~
5361+ =/ head=itype hed.typ
5362+ ?: |(?=(%var -.head) ?=(%avar -.head) ?=(%nvar -.head)) ~
5363+ ?. ?=(%face -.head) ~
5364+ =/ entry=iwfield [name.head (mul 2 axis) body.head]
5365+ ?: ?=(^ (~(get by index) name.entry)) ~
5366+ $(typ tal.typ, axis +((mul 2 axis)), fuel (dec fuel), order [entry order], index (~(put by index) name.entry entry))
5367+++ width-in-order
5368+ |= [source=(list iwfield) target=(list iwfield)]
5369+ ^- ?
5370+ ?~ target &
5371+ ?~ source |
5372+ ?: =(name.i.source name.i.target) $(source t.source, target t.target)
5373+ $(source t.source)
5374+++ width-fit-fields
5375+ |= [source=(map term iwfield) target=(list iwfield) sub=isub next=@ud]
5376+ ^- (unit iwidth-result)
5377+ ?~ target `[~ sub next]
5378+ =/ found=(unit iwfield) (~(get by source) name.i.target)
5379+ ?~ found ~
5380+ =/ fit=ifit (itype-fit typ.u.found typ.i.target sub next)
5381+ ?. ?=(%ok -.fit) ~
5382+ =/ rest=(unit iwidth-result) $(target t.target, sub sub.fit, next next.fit)
5383+ ?~ rest ~
5384+ `[[[name.i.target axis.u.found] steps.u.rest] sub.u.rest next.u.rest]
5385+++ width-spine-exhausted
5386+ |= [t=itype fuel=@ud]
5387+ ^- ?
5388+ ?: =(0 fuel) &
5389+ ?. ?=(%cell -.t) |
5390+ ?. ?=(%face -.hed.t) |
5391+ $(t tal.t, fuel (dec fuel))
5392+++ width-known-shape
5393+ |= [actual=itype expected=itype sub=isub]
5394+ ^- (unit [source=iwfields target=iwfields])
5395+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
5396+ =/ source=(unit iwfields) (width-scan actual sub 1 1.024)
5397+ =/ target=(unit iwfields) (width-scan expected sub 1 1.024)
5398+ ?~ source ~
5399+ ?~ target ~
5400+ `[u.source u.target]
5401+::
5402+++ width-shape
5403+ |= [actual=itype expected=itype sub=isub]
5404+ ^- (unit [source=iwfields target=iwfields])
5405+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
5406+ =/ source=(unit iwfields) (width-scan actual sub 1 4.096)
5407+ =/ target=(unit iwfields) (width-scan expected sub 1 4.096)
5408+ ?~ source ~
5409+ ?~ target ~
5410+ ?. (gth (lent order.u.source) (lent order.u.target)) ~
5411+ `[u.source u.target]
5412+++ width-proj-shape
5413+ |= [actual=itype expected=itype sub=isub]
5414+ ^- (unit [source=iwfields target=iwfields])
5415+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
5416+ =/ source=(unit iwfields) (width-scan actual sub 1 4.096)
5417+ =/ target=(unit iwfields) (width-scan expected sub 1 4.096)
5418+ ?~ source ~
5419+ ?~ target ~
5420+ ?: (lth (lent order.u.source) (lent order.u.target)) ~
5421+ `[u.source u.target]
5422+::
5423+++ width-project
5424+ |= [shape=[source=iwfields target=iwfields] sub=isub next=@ud]
5425+ ^- (unit iwidth-result)
5426+ ?. (width-in-order order.source.shape order.target.shape) ~
5427+ (width-fit-fields index.source.shape order.target.shape sub next)
5428+::
5429++$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud projections=(list iwprojection)]
53165430+$ idiag [msg=tape sites=(list [at=span note=tape])]
53175431+$ iresult (each [typ=itype state=istate] idiag)
53185432+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -6360,12 +6474,12 @@
63606474 ^- isample-result
63616475 ?- -.s
63626476 %bind
6363− ?: |(?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
6477+ ?: |(=(name.s %proj) ?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
63646478 [%| "sample shadows a name"]
63656479 =/ t=itype [%var next.state]
63666480 [%& t [[name.s [t ~]] env] state(next +(next.state), binders [next.state binders.state])]
63676481 %face
6368− ?: |(?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
6482+ ?: |(=(name.s %proj) ?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
63696483 [%| "sample shadows a name"]
63706484 =/ t=(unit [typ=itype state=istate]) (infer-simple-shape shape.s state)
63716485 ?~ t [%| "sample mold is not supported by partial inference"]
@@ -6433,6 +6547,7 @@
64336547 |-
64346548 ?~ ds &
64356549 ?: ?=(%mold -.i.ds) $(ds t.ds)
6550+ ?: =(name.i.ds %proj) |
64366551 ?. (unique-value-name name.i.ds names) |
64376552 ?: ?=(^ (ienv-lookup name.i.ds env)) |
64386553 ?: (lien globals.state |=(n=term =(n name.i.ds))) |
@@ -6456,6 +6571,7 @@
64566571 |-
64576572 ?~ locals &
64586573 =/ n=term name.i.locals
6574+ ?: =(n %proj) |
64596575 ?. (unique-value-name n names) |
64606576 ?: (lien molds.state |=(m=[name=term body=shape] =(n name.m))) |
64616577 ?: (lien marks.state |=(m=term =(n m))) |
@@ -6972,7 +7088,7 @@
69727088 [%| ["list branch pattern is not supported by partial inference" ~]]
69737089 =/ binder=(unit [head=term tail=term]) ?:(first-empty second-name first-name)
69747090 ?~ binder [%| ["list branch pattern is not supported by partial inference" ~]]
6975− ?: |(=(head.u.binder tail.u.binder) ?=(^ (ienv-lookup head.u.binder env)) ?=(^ (ienv-lookup tail.u.binder env)) (lien globals.state |=(n=term |(=(n head.u.binder) =(n tail.u.binder)))))
7091+ ?: |(=(head.u.binder %proj) =(tail.u.binder %proj) =(head.u.binder tail.u.binder) ?=(^ (ienv-lookup head.u.binder env)) ?=(^ (ienv-lookup tail.u.binder env)) (lien globals.state |=(n=term |(=(n head.u.binder) =(n tail.u.binder)))))
69767092 [%| ["pattern binder shadows a name" ~]]
69777093 =/ extended=ienv [[head.u.binder [i.args.typ ~]] [tail.u.binder [typ ~]] env]
69787094 =/ left=iresult
@@ -7009,7 +7125,7 @@
70097125 [%| ["unit branch pattern is not supported by partial inference" ~]]
70107126 =/ binder=(unit term) ?:(first-empty second-name first-name)
70117127 ?~ binder [%| ["unit branch pattern is not supported by partial inference" ~]]
7012− ?: |(?=(^ (ienv-lookup u.binder env)) (lien globals.state |=(n=term =(n u.binder))))
7128+ ?: |(=(u.binder %proj) ?=(^ (ienv-lookup u.binder env)) (lien globals.state |=(n=term =(n u.binder))))
70137129 [%| ["pattern binder shadows a name" ~]]
70147130 =/ payload=(unit itype) (unit-union-payload typ)
70157131 ?~ payload [%| ["unit branch subject is not supported by partial inference" ~]]
@@ -7109,7 +7225,7 @@
71097225 ^- (unit ienv)
71107226 =. t ?:(?=(%face -.t) body.t t)
71117227 ?: ?=(%bind -.p)
7112− ?: |(?=(^ (ienv-lookup name.p env)) (lien globals |=(n=term =(n name.p)))) ~
7228+ ?: |(=(name.p %proj) ?=(^ (ienv-lookup name.p env)) (lien globals |=(n=term =(n name.p)))) ~
71137229 `[[name.p [t ~]] env]
71147230 ?: ?=(%cell -.p) (union-pattern-bind-items items.p t env globals)
71157231 `env
@@ -7762,6 +7878,9 @@
77627878 =/ value=iresult
77637879 (infer-call-context-arg val.e typ.u.target env state.u.target at.shape.e)
77647880 ?: ?=(%| -.value) value
7881+ =/ shape=(unit [source=iwfields target=iwfields])
7882+ (width-shape typ.p.value typ.u.target sub.state.p.value)
7883+ ?^ shape [%| ["record width constraint needs unsupported inference" ~]]
77657884 =/ fit=ifit (itype-fit typ.p.value typ.u.target sub.state.p.value next.state.p.value)
77667885 ?: ?=(%unknown -.fit) [%| ["cast constraint is not supported by partial inference" ~]]
77677886 ?: ?=(%bad -.fit)
@@ -7793,6 +7912,8 @@
77937912 [%& [%fn typ.p.sam typ.p.body] state.p.body]
77947913 %call
77957914 ?~ args.e [%| ["call has no argument" ~]]
7915+ ?: (explicit-proj-call e env state)
7916+ [%| ["proj needs an expected record type" ~]]
77967917 (infer-call-with-head e env state (infer-fragment head.e env state))
77977918 * [%| ["expression is not supported by partial inference" ~]]
77987919 ==
@@ -7803,6 +7924,20 @@
78037924::
78047925:: Check a call using the head already inferred in this state. Keeping
78057926:: this shared avoids evaluating or instantiating a contextual head twice.
7927+++ width-has-projections
7928+ |= ps=(list iwprojection)
7929+ ^- ?
7930+ ?~ ps |
7931+ &
7932+::
7933++$ iwidth-elaboration [original=expr typ=itype sub=isub projections=(list iwprojection)]
7934+++ infer-width-elaboration
7935+ |= [e=expr env=ienv state=istate]
7936+ ^- (each iwidth-elaboration idiag)
7937+ =/ out=iresult (infer-fragment e env state)
7938+ ?: ?=(%| -.out) [%| p.out]
7939+ [%& [e typ.p.out sub.state.p.out (flop projections.state.p.out)]]
7940+::
78067941++ infer-call-with-head
78077942 |= [e=expr env=ienv state=istate head=iresult]
78087943 ^- iresult
@@ -7822,7 +7957,13 @@
78227957 =/ st=istate state.p.arg
78237958 =/ ht=itype (itype-walk typ.p.head sub.st)
78247959 ?: ?=(%fn -.ht)
7825− =/ fit=ifit (itype-fit typ.p.arg sample.ht sub.st next.st)
7960+ =/ shape=(unit [source=iwfields target=iwfields])
7961+ ?^ t.args.e ~
7962+ (width-shape typ.p.arg sample.ht sub.st)
7963+ ?^ shape [%| ["record width constraint needs unsupported inference" ~]]
7964+ =/ fit=ifit
7965+ ?^ t.args.e (itype-fit-inner typ.p.arg sample.ht sub.st next.st & |)
7966+ (itype-fit typ.p.arg sample.ht sub.st next.st)
78267967 ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
78277968 ?: ?=(%bad -.fit)
78287969 ?~ t.args.e
@@ -7922,6 +8063,87 @@
79228063 ?~ sub (infer-call-with-head e env state head)
79238064 (infer-call-with-head e env state [%& typ.p.head state.p.head(sub u.sub)])
79248065::
8066+:: An eligible fully faced literal receives context by name, in source order.
8067+++ width-literal-fields
8068+ |= [items=(list item) axis=@ud fuel=@ud]
8069+ ^- (unit iwfields)
8070+ =/ order=(list iwfield) ~
8071+ =/ index=(map term iwfield) *(map term iwfield)
8072+ |-
8073+ ?~ items ~
8074+ ?: =(0 fuel) ~
8075+ ?~ face.i.items ~
8076+ =/ at-axis=@ud ?~(t.items axis (mul 2 axis))
8077+ =/ entry=iwfield [u.face.i.items at-axis [%noun ~]]
8078+ ?: ?=(^ (~(get by index) name.entry)) ~
8079+ =. index (~(put by index) name.entry entry)
8080+ =. order [entry order]
8081+ ?~ t.items `[(flop order) index]
8082+ $(items t.items, axis +((mul 2 axis)), fuel (dec fuel))
8083+++ width-infer-items
8084+ |= [items=(list item) expected=(map term iwfield) env=ienv state=istate context=span]
8085+ ^- iresult
8086+ ?~ items [%| ["empty record is not supported" ~]]
8087+ ?~ face.i.items [%| ["record face needs unsupported inference" ~]]
8088+ =/ field=(unit iwfield) (~(get by expected) u.face.i.items)
8089+ =/ head=iresult
8090+ ?~ field (infer-fragment val.i.items env state)
8091+ (infer-call-context-arg val.i.items typ.u.field env state context)
8092+ ?: ?=(%| -.head) head
8093+ =/ typ=itype [%face u.face.i.items typ.p.head]
8094+ ?~ t.items [%& typ state.p.head]
8095+ =/ tail=iresult $(items t.items, state state.p.head)
8096+ ?: ?=(%| -.tail) tail
8097+ [%& [%cell typ typ.p.tail] state.p.tail]
8098+++ width-infer-literal
8099+ |= [e=expr expected=itype env=ienv state=istate context=span]
8100+ ^- (unit iresult)
8101+ ?. ?=(%tuple -.e) ~
8102+ ?. ?=(%cell -.expected) ~
8103+ =/ source=(unit iwfields) (width-literal-fields items.e 1 4.096)
8104+ =/ target=(unit iwfields) (width-scan expected sub.state 1 4.096)
8105+ ?~ source ~
8106+ ?~ target ~
8107+ ?: (lth (lent order.u.source) (lent order.u.target)) ~
8108+ ?. (width-in-order order.u.source order.u.target)
8109+ `(infer-simple-items items.e env state)
8110+ `(width-infer-items items.e index.u.target env state context)
8111+::
8112+:: Recognize only the reserved unqualified, one-argument operation.
8113+++ explicit-proj-call
8114+ |= [e=expr env=ienv state=istate]
8115+ ^- ?
8116+ ?. ?=(%call -.e) |
8117+ ?. ?=([* ~] args.e) |
8118+ ?. ?=(%wing -.head.e) |
8119+ ?. =(names.head.e ~[%proj]) |
8120+ ?: ?=(^ (ienv-lookup %proj env)) |
8121+ ?: (lien globals.state |=(n=term =(n %proj))) |
8122+ ?~ prelude.state &
8123+ ?:(?=(^ (ienv-lookup %proj values.u.prelude.state)) | &)
8124+++ infer-proj-source
8125+ |= [e=expr expected=itype env=ienv state=istate context=span]
8126+ ^- iresult
8127+ ?: ?=(%group -.e) $(e inner.e)
8128+ =/ literal=(unit iresult) (width-infer-literal e expected env state context)
8129+ ?^ literal u.literal
8130+ (infer-fragment e env state)
8131+++ infer-proj-context
8132+ |= [e=expr expected=itype env=ienv state=istate context=span]
8133+ ^- iresult
8134+ ?> ?=(%call -.e)
8135+ ?~ args.e [%| ["proj needs one record" ~]]
8136+ ?. ?=(%cell -.expected) [%| ["proj needs an expected record type" ~]]
8137+ =/ value=iresult (infer-proj-source i.args.e expected env state context)
8138+ ?: ?=(%| -.value) value
8139+ =/ shape=(unit [source=iwfields target=iwfields])
8140+ (width-proj-shape typ.p.value expected sub.state.p.value)
8141+ ?~ shape [%| ["proj needs a known record containing its expected fields" ~]]
8142+ =/ project=(unit iwidth-result) (width-project u.shape sub.state.p.value next.state.p.value)
8143+ ?~ project [%| ["proj constraint needs unsupported inference" ~]]
8144+ =/ st=istate state.p.value(sub sub.u.project, next next.u.project)
8145+ [%& expected st(projections [[at.e e typ.p.value expected steps.u.project] projections.st])]
8146+::
79258147++ infer-call-context-arg
79268148 |= [e=expr expected=itype env=ienv state=istate context=span]
79278149 ^- iresult
@@ -7935,6 +8157,8 @@
79358157 =/ target=itype (itype-walk expected sub.state)
79368158 |-
79378159 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
8160+ ?: (explicit-proj-call e env state)
8161+ (infer-proj-context e expected env state context)
79388162 :: Only the source-proven one-layer cell is exposed. Each recursive
79398163 :: descent consumes one written tuple; named values use ordinary fit.
79408164 ?: &(?=(%jrec -.target) ?=(%lit -.e) =(%null form.lit.e))
@@ -8050,7 +8274,7 @@
80508274 ?~ pats [%& ~]
80518275 ?. ?=(%bind -.i.pats) [%| 'branch pattern is not supported by partial inference']
80528276 =/ name=term name.i.pats
8053− ?: |(?=(^ (ienv-lookup name env)) (lien globals |=(n=term =(n name))) (lien seen |=(n=term =(n name))))
8277+ ?: |(=(name %proj) ?=(^ (ienv-lookup name env)) (lien globals |=(n=term =(n name))) (lien seen |=(n=term =(n name))))
80548278 [%| 'pattern shadows a name']
80558279 =/ rest=(each (list term) @t) $(pats t.pats, seen [name seen])
80568280 ?: ?=(%| -.rest) rest
@@ -8677,6 +8901,8 @@
86778901 =/ body=igate-seeds (infer-gate-group-bodies entries.p.seeded seeds state.p.seeded)
86788902 ?: ?=(%| -.body) body
86798903 :: Per-member ownership through mutual recursion is not implemented.
8904+ ?: !=(projections.state.p.body projections.state)
8905+ [%| ["record projection in recursive groups needs unsupported inference" ~]]
86808906 ?: !=(holes.state.p.body holes.state)
86818907 [%| ["holes in recursive groups need unsupported inference" ~]]
86828908 ?: (pending-tags tags.state.p.body sub.state.p.body)
@@ -8685,16 +8911,32 @@
86858911 ?: ?=(%| -.schemes) schemes
86868912 [%& [(weld p.schemes env) state.p.body(globals globals.state)]]
86878913::
8914+++ width-finalize
8915+ |= [ps=(list iwprojection) sub=isub visible=(list @ud)]
8916+ ^- (unit (list iwprojection))
8917+ ?~ ps `~
8918+ ?: (lien t.ps |=(p=iwprojection =(at.p at.i.ps))) ~
8919+ =/ src=itype (default-decimals (itype-normalize source.i.ps sub))
8920+ =/ dst=itype (default-decimals (itype-normalize target.i.ps sub))
8921+ ?: |((itype-has-nvar src) (itype-has-nvar dst) (itype-has-tag src) (itype-has-tag dst)) ~
8922+ =/ vars=(list @ud) (weld (itype-vars src) (itype-vars dst))
8923+ ?. (levy vars |=(n=@ud (lien visible |=(v=@ud =(n v))))) ~
8924+ =/ rest=(unit (list iwprojection)) $(ps t.ps)
8925+ ?~ rest ~
8926+ =/ entry=iwprojection i.ps
8927+ =. entry entry(source src, target dst)
8928+ `[entry u.rest]
8929+::
86888930++ add-supported-defs
8689− |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile)]
8690− ^- ienv
8691− ?~ ds env
8931+ |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
8932+ ^- [env=ienv artifacts=(list iwidth-definition)]
8933+ ?~ ds [env artifacts]
86928934 =/ d=def i.ds
86938935 ?: ?=(%mold -.d) $(ds t.ds)
86948936 ?. (unique-value-name name.d globals) $(ds t.ds)
86958937 ?^ (ienv-lookup name.d env) $(ds t.ds)
86968938 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
8697− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256]
8939+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
86988940 =. initial (reserve-def-caps val.d initial)
86998941 =/ result=iresult (infer-fragment val.d env initial)
87008942 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
@@ -8707,9 +8949,14 @@
87078949 ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
87088950 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
87098951 ?: (gth (lent vars) 26) $(ds t.ds)
8952+ =/ finalized=(unit (list iwprojection))
8953+ (width-finalize projections.state.p.result sub.state.p.result vars)
8954+ ?~ finalized $(ds t.ds)
8955+ =? artifacts ?=(^ u.finalized)
8956+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
87108957 $(ds t.ds, env [[name.d [typ vars]] env])
87118958::
8712−+$ iresolved [env=ienv grouped=(list term)]
8959++$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
87138960+$ iadj (map term (list term))
87148961+$ ivisited (map term ?)
87158962+$ iwork (list [name=term done=?])
@@ -8803,9 +9050,9 @@
88039050 (lien (graph-edges i.component graph) |=(x=term =(x i.component)))
88049051::
88059052++ add-groups
8806− |= [ds=(list def) components=icomponents graph=iadj env=ienv grouped=(list term) state=istate]
9053+ |= [ds=(list def) components=icomponents graph=iadj env=ienv grouped=(list term) artifacts=(list iwidth-definition) state=istate]
88079054 ^- iresolved
8808− ?~ components [env grouped]
9055+ ?~ components [env grouped artifacts]
88099056 =/ component=(list term) i.components
88109057 ?. (graph-cycle component graph) $(components t.components)
88119058 ?: (lien component |=(n=term ?=(^ (ienv-lookup n env)))) $(components t.components)
@@ -8824,17 +9071,19 @@
88249071 ^- iresolved
88259072 =/ env=ienv ~
88269073 =/ grouped=(list term) ~
9074+ =/ artifacts=(list iwidth-definition) ~
88279075 =/ names=(list term) (global-value-names ds)
88289076 =/ nameset=ivisited (graph-nameset names ~)
88299077 =/ graph=iadj (graph-make-forward ds nameset ~)
88309078 =/ components=icomponents (graph-components ds names)
88319079 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
88329080 |-
8833− =/ next=ienv (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude)
8834− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256]
8835− =/ out=iresolved (add-groups ds components graph next grouped initial)
9081+ =/ next=[env=ienv artifacts=(list iwidth-definition)]
9082+ (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9083+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9084+ =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
88369085 ?: =(env env.out) out
8837− $(env env.out, grouped grouped.out)
9086+ $(env env.out, grouped grouped.out, artifacts artifacts.out)
88389087::
88399088++ resolve-supported-defs
88409089 |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile)]
@@ -9485,6 +9734,60 @@
94859734 ==
94869735 [n $(imports t.imports)]
94879736::
9737+++ reserved-proj-sample
9738+ |= sam=sample
9739+ ^- ?
9740+ ?- -.sam
9741+ %bind =(name.sam %proj)
9742+ %face =(name.sam %proj)
9743+ %pun =(name.sam %proj)
9744+ %cell (lien items.sam reserved-proj-sample)
9745+ * |
9746+ ==
9747+++ reserved-proj-pattern
9748+ |= p=pattern
9749+ ^- ?
9750+ ?- -.p
9751+ %bind =(name.p %proj)
9752+ %cell (lien items.p reserved-proj-pattern)
9753+ * |
9754+ ==
9755+++ reserved-proj-def
9756+ |= d=def
9757+ ^- ?
9758+ ?: =(name.d %proj) &
9759+ ?: ?=(%value -.d) (reserved-proj-expr val.d)
9760+ |
9761+++ reserved-proj-expr
9762+ |= e=expr
9763+ ^- ?
9764+ ?- -.e
9765+ %str (lien pieces.e |=(p=piece ?:(?=(%expr -.p) (reserved-proj-expr p.p) |)))
9766+ %qath (lien segs.e |=(p=qseg ?:(?=(%expr -.p) (reserved-proj-expr p.p) |)))
9767+ %change (lien edits.e |=(p=edit (reserved-proj-expr val.p)))
9768+ %pair $(e val.e)
9769+ %unit $(e val.e)
9770+ %group $(e inner.e)
9771+ %list (lien items.e reserved-proj-expr)
9772+ %tuple (lien items.e |=(i=item (reserved-proj-expr val.i)))
9773+ ?(%gate %gate-wide) |((reserved-proj-sample sample.e) $(e body.e))
9774+ %cast $(e val.e)
9775+ %call |($(e head.e) (lien args.e reserved-proj-expr))
9776+ %trace |($(e val.e) $(e then.e))
9777+ %branch |($(e subject.e) (lien arms.e |=(a=arm |((reserved-proj-pattern pat.a) (reserved-proj-expr val.a)))))
9778+ %body |((lien defs.e reserved-proj-def) $(e final.e))
9779+ * |
9780+ ==
9781+::
9782+++ module-has-reserved-proj
9783+ |= mod=module
9784+ ^- ?
9785+ =/ imported=(list term) (import-binding-names imports.mod)
9786+ =/ vals=(list term) (global-value-names defs.mod)
9787+ =/ molds=imolds (collect-simple-molds defs.mod)
9788+ =/ mold-names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9789+ |((lien (weld imported (weld vals mold-names)) |=(n=term =(n %proj))) (lien defs.mod reserved-proj-def))
9790+::
94889791++ module-scope-valid
94899792 |= [mod=module prelude-values=(list term) prelude-molds=(list term)]
94909793 ^- ?
@@ -9492,6 +9795,7 @@
94929795 =/ vals=(list term) (global-value-names defs.mod)
94939796 =/ molds=imolds (collect-simple-molds defs.mod)
94949797 =/ mold-names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9798+ ?: (module-has-reserved-proj mod) |
94959799 ?. %+ levy imported
94969800 |= n=term
94979801 &((unique-value-name n imported) !(lien vals |=(v=term =(n v))) !(lien mold-names |=(m=term =(n m))) !(lien prelude-values |=(v=term =(n v))) !(lien prelude-molds |=(m=term =(n m))))
@@ -9602,7 +9906,7 @@
96029906 =/ a=itype [%avar 0]
96039907 =/ pair=itype [%cell a a]
96049908 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
9605− [~[[%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~]
9909+ [~[[%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~]
96069910::
96079911++ infer-private-internal
96089912 |= src=@t
@@ -9626,12 +9930,13 @@
96269930 =/ js=ijimports ~[[face.i.imports.mod private-primitive-interface]]
96279931 =/ reserved=(list term) ~[face.i.imports.mod]
96289932 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9629− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256]
9933+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~]
96309934 =/ mts=(each imold-types @t) (module-mold-types molds state)
96319935 ?: ?=(%| -.mts) ~
9632− =/ env=ienv (resolve-supported-defs defs.mod molds globals ~ ~ ~ ~ js reserved at ~)
9936+ =/ resolution=iresolved (resolve-groups defs.mod molds globals ~ ~ ~ ~ js reserved at ~)
9937+ =/ env=ienv env.resolution
96339938 ?. (module-values-complete defs.mod env) ~
9634− `[env p.mts at ~]
9939+ `[env p.mts at ~ artifacts.resolution ~ `src]
96359940::
96369941++ partial-prelude-interface-with-internal
96379942 |= [src=@t internal-source=(unit @t)]
@@ -9664,16 +9969,16 @@
96649969 =? env-molds declared
96659970 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
96669971 =/ reserved=(list term) ?:(declared ~[%list] ~)
9667− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256]
9972+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~]
96689973 :: Other prelude molds may use list only after its source has passed
96699974 :: the standard-list check. The raw declaration remains removed.
96709975 =/ declared-list=(unit shape) (find-simple-mold %list molds)
96719976 =/ mold-prelude=(unit ifile)
96729977 ?~ declared-list ~
96739978 ?. (standard-prelude-list u.declared-list) ~
9674− `[~ ~[[%list [[%collection %list ~[[%var 0]]] ~[0]]]] at ~]
9979+ `[~ ~[[%list [[%collection %list ~[[%var 0]]] ~[0]]]] at ~ ~ ~ ~]
96759980 =/ mt=imold-types (partial-prelude-molds molds state(prelude mold-prelude))
9676− =/ partial=ifile [~ mt at ~]
9981+ =/ partial=ifile [~ mt at ~ ~ ~ ~]
96779982 :: An explicitly qualified re-export must resolve. Other unsupported
96789983 :: prelude declarations remain reserved but absent from the interface.
96799984 =/ required=imolds
@@ -9684,9 +9989,13 @@
96849989 ?~ names.sh |
96859990 ?=(^ t.names.sh)
96869991 ?. (levy required |=(m=[name=term body=shape] ?=(^ (find-jibb-mold name.m partial)))) ~
9687− =/ env=ienv (resolve-supported-defs ds env-molds globals ~ ~ ~ ~ u.private reserved at `partial)
9992+ =/ resolution=iresolved (resolve-groups ds env-molds globals ~ ~ ~ ~ u.private reserved at `partial)
9993+ =/ env=ienv env.resolution
96889994 ?. (hole-values-present ds env) ~
9689− `[env mt at ~]
9995+ =/ deps=(list iwidth-dependency)
9996+ ?~ u.private ~
9997+ ~[[at.interface.i.u.private source.interface.i.u.private elaborations.interface.i.u.private]]
9998+ `[env mt at ~ artifacts.resolution deps `src]
96909999::
969110000++ partial-prelude-interface
969210001 |= src=@t
@@ -9891,6 +10200,7 @@
989110200 ^- ?
989210201 =/ path-names=(list term) (turn paths |=(p=iapi-path name.p))
989310202 =/ derived=(list term) (weld path-names poke-names)
10203+ ?: (lien derived |=(n=term =(n %proj))) |
989410204 =/ outer=(list term) (weld prelude-values (weld (global-value-names defs.mod) (api-import-faces imports.mod)))
989510205 (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x))))))
989610206::
@@ -10022,7 +10332,7 @@
1002210332 =/ mark=(unit itype) (find-imported-mark n mark-externals marks)
1002310333 ?~ mark ~
1002410334 =/ sc=ischeme [[%fn u.mark typ.u.poke] ~]
10025− `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]]]
10335+ `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~]
1002610336::
1002710337++ infer-jibb-file
1002810338 |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
@@ -10035,7 +10345,8 @@
1003510345 ?: ?=([%ui %api *] at)
1003610346 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
1003710347 ?~ iface [%| (crip "API module needs unsupported inference: {(spud at)}")]
10038− [%& [u.iface [[at u.iface] cache]]]
10348+ =/ checked=ifile u.iface(source `src)
10349+ [%& [checked [[at checked] cache]]]
1003910350 ?. (module-scope-valid mod prelude-values prelude-molds)
1004010351 ?: (pending-declared-poke at mod prelude-values prelude-molds)
1004110352 [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
@@ -10051,13 +10362,15 @@
1005110362 =/ marks=(list term) (collect-mark-imports imports.mod)
1005210363 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1005310364 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10054− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256]
10365+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~]
1005510366 =/ mts=(each imold-types @t) (module-mold-types molds state)
1005610367 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
10057− =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
10368+ =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
10369+ =/ env=ienv env.resolution
1005810370 ?. (module-values-complete defs.mod env)
1005910371 [%| (crip "module definitions need unsupported inference: {(spud at)}")]
10060− [%& [[env p.mts at ~] [[at [env p.mts at ~]] cache.p.js]]]
10372+ =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src]
10373+ [%& [iface [[at iface] cache.p.js]]]
1006110374::
1006210375:: +golden-types-with-modules fails closed for imports without prelude
1006310376:: scope. +golden-types-with-prelude resolves supported library graphs;
@@ -10155,6 +10468,8 @@
1015510468 ?: ?=(%| -.parsed) (show-error src p.parsed)
1015610469 =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
1015710470 ?^ duplicate (duplicate-fields-report file src u.duplicate)
10471+ ?: (module-has-reserved-proj p.parsed)
10472+ 'module has reserved proj name'
1015810473 =/ ds=(list def) defs.p.parsed
1015910474 =/ molds=imolds (collect-simple-molds ds)
1016010475 =/ globals=(list term) (weld prelude-values (weld (turn jimports |=(j=[face=term interface=ifile] face.j)) (global-value-names ds)))
@@ -10182,7 +10497,7 @@
1018210497 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
1018310498 $(ds t.ds, lines [line lines])
1018410499 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10185− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256]
10500+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~]
1018610501 =. initial (reserve-def-caps val.d initial)
1018710502 =/ result=iresult
1018810503 ?: |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
@@ -10216,6 +10531,8 @@
1021610531 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
1021710532 ?: (gth (lent vars) 26)
1021810533 $(ds t.ds, lines [(crip "++ {(trip name.d)}: too many variables for partial printer") lines])
10534+ ?~ (width-finalize projections.state.p.result sub.state.p.result vars)
10535+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: record projection elaboration needs unsupported inference") lines])
1021910536 =/ printable=itype (canonical-itype typ vars)
1022010537 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype printable ~)}{(show-atom-constraint printable)}")
1022110538 $(ds t.ds, lines [line lines])
tests/golden/types-proj-explicit-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: Result casts, call context, generic fields, exact-width records, a discarded effect and pending tags/null. Bare or aliased proj, wrong arity, nested record context, single-field targets, incompatible or missing fields and absent target context currently fail closed. A multi-argument generic-tail call retains ordinary right-nested semantics without projection. The current implementation accepts a same-order subsequence and fails closed on reversed fields while field-order semantics are pending.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-explicit-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-explicit-context/source.jibbnew file+35
@@ -0,0 +1,35 @@
1+:: Explicit proj selects fields from its expected result type.
2+:: The operation is reserved; direct calls do not insert a projection.
3+++ choose |= x=[a=@t b=@p] a.x
4+++ source |= x=@t [a=x b=~zod c=%.y]
5+++ trace-extra |= x=@t
6+ ~& "extra"
7+ x
8+++ direct ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])
9+++ from-call ^- [a=@t b=@p] (proj (source "hi"))
10+++ into-call (choose (proj [a="hi" b=~zod c=%.y]))
11+++ nested ^- [result=[a=@t b=@p] done=?] [result=(proj [a="hi" b=~zod c=%.y]) done=%.y]
12+++ generic |= x=B ^- [a=@t b=B] (proj [a="hi" b=x c=%.y])
13+++ no-context (proj [a="hi" b=~zod c=%.y])
14+++ unknown-target |= x (proj x)
15+++ missing ^- [a=@t b=@p] (proj [a="hi" c=%.y d=~zod])
16+++ incompatible ^- [a=@t b=@p] (proj [a="hi" b="wrong" c=%.y])
17+++ trace-extra-field ^- [a=@t b=@p] (proj [a="hi" b=~zod c=(trace-extra "once")])
18+++ pending-tag ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%orphan])
19+++ pending-null ^- [a=@t b=@p] (proj [a="hi" b=~zod c=~])
20+++ positional ^- [a=@t b=@p] (proj "hi" ~zod %.y)
21+++ not-record ^- [a=@t b=@p] (proj "hi")
22+:: The user chose explicit proj; implicit projection must be rejected.
23+++ bare-cast ^- [a=@t b=@p] [a="hi" b=~zod c=%.y]
24+++ bare-call (choose [a="hi" b=~zod c=%.y])
25+++ bare-result |= x=@t ^- [a=@t b=@p] (source x)
26+++ bare proj
27+++ alias proj
28+++ alias-use ^- [a=@t b=@p] (alias [a="hi" b=~zod c=%.y])
29+++ two-arguments ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y] [a="x" b=~zod c=%.y])
30+++ one-field ^- [a=@t] (proj [a="hi" b=~zod c=%.y])
31+++ exact-record ^- [a=@t b=@p] (proj [a="hi" b=~zod])
32+++ positional-generic |= [a=@t b=B] a
33+++ positional-generic-call (positional-generic "hi" ~zod %.y)
34+++ subsequence ^- [a=@t c=?] (proj [a="hi" b=~zod c=%.y])
35+++ reversed ^- [b=@p a=@t] (proj [a="hi" b=~zod c=%.y])
tests/golden/types-proj-explicit-context/tokens.txtnew file+626
@@ -0,0 +1,626 @@
1+3:1 glyph ++
2+3:4 name choose
3+3:11 glyph |=
4+3:14 name x
5+3:15 tight glyph =
6+3:16 tight glyph [
7+3:17 tight name a
8+3:18 tight glyph =
9+3:19 tight aura @t
10+3:22 name b
11+3:23 tight glyph =
12+3:24 tight aura @p
13+3:26 tight glyph ]
14+3:28 wing a.x
15+4:1 NEWLINE
16+4:1 glyph ++
17+4:4 name source
18+4:11 glyph |=
19+4:14 name x
20+4:15 tight glyph =
21+4:16 tight aura @t
22+4:19 glyph [
23+4:20 tight name a
24+4:21 tight glyph =
25+4:22 tight name x
26+4:24 name b
27+4:25 tight glyph =
28+4:26 tight lit ~zod
29+4:31 name c
30+4:32 tight glyph =
31+4:33 tight lit %.y
32+4:36 tight glyph ]
33+5:1 NEWLINE
34+5:1 glyph ++
35+5:4 name trace-extra
36+5:16 glyph |=
37+5:19 name x
38+5:20 tight glyph =
39+5:21 tight aura @t
40+6:3 INDENT
41+6:3 glyph ~&
42+6:6 str "extra"
43+7:5 INDENT
44+7:5 name x
45+8:1 DEDENT
46+8:1 DEDENT
47+8:1 NEWLINE
48+8:1 glyph ++
49+8:4 name direct
50+8:11 glyph ^-
51+8:14 glyph [
52+8:15 tight name a
53+8:16 tight glyph =
54+8:17 tight aura @t
55+8:20 name b
56+8:21 tight glyph =
57+8:22 tight aura @p
58+8:24 tight glyph ]
59+8:26 glyph (
60+8:27 tight name proj
61+8:32 glyph [
62+8:33 tight name a
63+8:34 tight glyph =
64+8:35 tight str "hi"
65+8:40 name b
66+8:41 tight glyph =
67+8:42 tight lit ~zod
68+8:47 name c
69+8:48 tight glyph =
70+8:49 tight lit %.y
71+8:52 tight glyph ]
72+8:53 tight glyph )
73+9:1 NEWLINE
74+9:1 glyph ++
75+9:4 name from-call
76+9:14 glyph ^-
77+9:17 glyph [
78+9:18 tight name a
79+9:19 tight glyph =
80+9:20 tight aura @t
81+9:23 name b
82+9:24 tight glyph =
83+9:25 tight aura @p
84+9:27 tight glyph ]
85+9:29 glyph (
86+9:30 tight name proj
87+9:35 glyph (
88+9:36 tight name source
89+9:43 str "hi"
90+9:47 tight glyph )
91+9:48 tight glyph )
92+10:1 NEWLINE
93+10:1 glyph ++
94+10:4 name into-call
95+10:14 glyph (
96+10:15 tight name choose
97+10:22 glyph (
98+10:23 tight name proj
99+10:28 glyph [
100+10:29 tight name a
101+10:30 tight glyph =
102+10:31 tight str "hi"
103+10:36 name b
104+10:37 tight glyph =
105+10:38 tight lit ~zod
106+10:43 name c
107+10:44 tight glyph =
108+10:45 tight lit %.y
109+10:48 tight glyph ]
110+10:49 tight glyph )
111+10:50 tight glyph )
112+11:1 NEWLINE
113+11:1 glyph ++
114+11:4 name nested
115+11:11 glyph ^-
116+11:14 glyph [
117+11:15 tight name result
118+11:21 tight glyph =
119+11:22 tight glyph [
120+11:23 tight name a
121+11:24 tight glyph =
122+11:25 tight aura @t
123+11:28 name b
124+11:29 tight glyph =
125+11:30 tight aura @p
126+11:32 tight glyph ]
127+11:34 name done
128+11:38 tight glyph =
129+11:39 tight glyph ?
130+11:40 tight glyph ]
131+11:42 glyph [
132+11:43 tight name result
133+11:49 tight glyph =
134+11:50 tight glyph (
135+11:51 tight name proj
136+11:56 glyph [
137+11:57 tight name a
138+11:58 tight glyph =
139+11:59 tight str "hi"
140+11:64 name b
141+11:65 tight glyph =
142+11:66 tight lit ~zod
143+11:71 name c
144+11:72 tight glyph =
145+11:73 tight lit %.y
146+11:76 tight glyph ]
147+11:77 tight glyph )
148+11:79 name done
149+11:83 tight glyph =
150+11:84 tight lit %.y
151+11:87 tight glyph ]
152+12:1 NEWLINE
153+12:1 glyph ++
154+12:4 name generic
155+12:12 glyph |=
156+12:15 name x
157+12:16 tight glyph =
158+12:17 tight tvar B
159+12:19 glyph ^-
160+12:22 glyph [
161+12:23 tight name a
162+12:24 tight glyph =
163+12:25 tight aura @t
164+12:28 name b
165+12:29 tight glyph =
166+12:30 tight tvar B
167+12:31 tight glyph ]
168+12:33 glyph (
169+12:34 tight name proj
170+12:39 glyph [
171+12:40 tight name a
172+12:41 tight glyph =
173+12:42 tight str "hi"
174+12:47 name b
175+12:48 tight glyph =
176+12:49 tight name x
177+12:51 name c
178+12:52 tight glyph =
179+12:53 tight lit %.y
180+12:56 tight glyph ]
181+12:57 tight glyph )
182+13:1 NEWLINE
183+13:1 glyph ++
184+13:4 name no-context
185+13:15 glyph (
186+13:16 tight name proj
187+13:21 glyph [
188+13:22 tight name a
189+13:23 tight glyph =
190+13:24 tight str "hi"
191+13:29 name b
192+13:30 tight glyph =
193+13:31 tight lit ~zod
194+13:36 name c
195+13:37 tight glyph =
196+13:38 tight lit %.y
197+13:41 tight glyph ]
198+13:42 tight glyph )
199+14:1 NEWLINE
200+14:1 glyph ++
201+14:4 name unknown-target
202+14:19 glyph |=
203+14:22 name x
204+14:24 glyph (
205+14:25 tight name proj
206+14:30 name x
207+14:31 tight glyph )
208+15:1 NEWLINE
209+15:1 glyph ++
210+15:4 name missing
211+15:12 glyph ^-
212+15:15 glyph [
213+15:16 tight name a
214+15:17 tight glyph =
215+15:18 tight aura @t
216+15:21 name b
217+15:22 tight glyph =
218+15:23 tight aura @p
219+15:25 tight glyph ]
220+15:27 glyph (
221+15:28 tight name proj
222+15:33 glyph [
223+15:34 tight name a
224+15:35 tight glyph =
225+15:36 tight str "hi"
226+15:41 name c
227+15:42 tight glyph =
228+15:43 tight lit %.y
229+15:47 name d
230+15:48 tight glyph =
231+15:49 tight lit ~zod
232+15:53 tight glyph ]
233+15:54 tight glyph )
234+16:1 NEWLINE
235+16:1 glyph ++
236+16:4 name incompatible
237+16:17 glyph ^-
238+16:20 glyph [
239+16:21 tight name a
240+16:22 tight glyph =
241+16:23 tight aura @t
242+16:26 name b
243+16:27 tight glyph =
244+16:28 tight aura @p
245+16:30 tight glyph ]
246+16:32 glyph (
247+16:33 tight name proj
248+16:38 glyph [
249+16:39 tight name a
250+16:40 tight glyph =
251+16:41 tight str "hi"
252+16:46 name b
253+16:47 tight glyph =
254+16:48 tight str "wrong"
255+16:56 name c
256+16:57 tight glyph =
257+16:58 tight lit %.y
258+16:61 tight glyph ]
259+16:62 tight glyph )
260+17:1 NEWLINE
261+17:1 glyph ++
262+17:4 name trace-extra-field
263+17:22 glyph ^-
264+17:25 glyph [
265+17:26 tight name a
266+17:27 tight glyph =
267+17:28 tight aura @t
268+17:31 name b
269+17:32 tight glyph =
270+17:33 tight aura @p
271+17:35 tight glyph ]
272+17:37 glyph (
273+17:38 tight name proj
274+17:43 glyph [
275+17:44 tight name a
276+17:45 tight glyph =
277+17:46 tight str "hi"
278+17:51 name b
279+17:52 tight glyph =
280+17:53 tight lit ~zod
281+17:58 name c
282+17:59 tight glyph =
283+17:60 tight glyph (
284+17:61 tight name trace-extra
285+17:73 str "once"
286+17:79 tight glyph )
287+17:80 tight glyph ]
288+17:81 tight glyph )
289+18:1 NEWLINE
290+18:1 glyph ++
291+18:4 name pending-tag
292+18:16 glyph ^-
293+18:19 glyph [
294+18:20 tight name a
295+18:21 tight glyph =
296+18:22 tight aura @t
297+18:25 name b
298+18:26 tight glyph =
299+18:27 tight aura @p
300+18:29 tight glyph ]
301+18:31 glyph (
302+18:32 tight name proj
303+18:37 glyph [
304+18:38 tight name a
305+18:39 tight glyph =
306+18:40 tight str "hi"
307+18:45 name b
308+18:46 tight glyph =
309+18:47 tight lit ~zod
310+18:52 name c
311+18:53 tight glyph =
312+18:54 tight lit %orphan
313+18:61 tight glyph ]
314+18:62 tight glyph )
315+19:1 NEWLINE
316+19:1 glyph ++
317+19:4 name pending-null
318+19:17 glyph ^-
319+19:20 glyph [
320+19:21 tight name a
321+19:22 tight glyph =
322+19:23 tight aura @t
323+19:26 name b
324+19:27 tight glyph =
325+19:28 tight aura @p
326+19:30 tight glyph ]
327+19:32 glyph (
328+19:33 tight name proj
329+19:38 glyph [
330+19:39 tight name a
331+19:40 tight glyph =
332+19:41 tight str "hi"
333+19:46 name b
334+19:47 tight glyph =
335+19:48 tight lit ~zod
336+19:53 name c
337+19:54 tight glyph =
338+19:55 tight lit ~
339+19:56 tight glyph ]
340+19:57 tight glyph )
341+20:1 NEWLINE
342+20:1 glyph ++
343+20:4 name positional
344+20:15 glyph ^-
345+20:18 glyph [
346+20:19 tight name a
347+20:20 tight glyph =
348+20:21 tight aura @t
349+20:24 name b
350+20:25 tight glyph =
351+20:26 tight aura @p
352+20:28 tight glyph ]
353+20:30 glyph (
354+20:31 tight name proj
355+20:36 str "hi"
356+20:41 lit ~zod
357+20:46 lit %.y
358+20:49 tight glyph )
359+21:1 NEWLINE
360+21:1 glyph ++
361+21:4 name not-record
362+21:15 glyph ^-
363+21:18 glyph [
364+21:19 tight name a
365+21:20 tight glyph =
366+21:21 tight aura @t
367+21:24 name b
368+21:25 tight glyph =
369+21:26 tight aura @p
370+21:28 tight glyph ]
371+21:30 glyph (
372+21:31 tight name proj
373+21:36 str "hi"
374+21:40 tight glyph )
375+23:1 NEWLINE
376+23:1 glyph ++
377+23:4 name bare-cast
378+23:14 glyph ^-
379+23:17 glyph [
380+23:18 tight name a
381+23:19 tight glyph =
382+23:20 tight aura @t
383+23:23 name b
384+23:24 tight glyph =
385+23:25 tight aura @p
386+23:27 tight glyph ]
387+23:29 glyph [
388+23:30 tight name a
389+23:31 tight glyph =
390+23:32 tight str "hi"
391+23:37 name b
392+23:38 tight glyph =
393+23:39 tight lit ~zod
394+23:44 name c
395+23:45 tight glyph =
396+23:46 tight lit %.y
397+23:49 tight glyph ]
398+24:1 NEWLINE
399+24:1 glyph ++
400+24:4 name bare-call
401+24:14 glyph (
402+24:15 tight name choose
403+24:22 glyph [
404+24:23 tight name a
405+24:24 tight glyph =
406+24:25 tight str "hi"
407+24:30 name b
408+24:31 tight glyph =
409+24:32 tight lit ~zod
410+24:37 name c
411+24:38 tight glyph =
412+24:39 tight lit %.y
413+24:42 tight glyph ]
414+24:43 tight glyph )
415+25:1 NEWLINE
416+25:1 glyph ++
417+25:4 name bare-result
418+25:16 glyph |=
419+25:19 name x
420+25:20 tight glyph =
421+25:21 tight aura @t
422+25:24 glyph ^-
423+25:27 glyph [
424+25:28 tight name a
425+25:29 tight glyph =
426+25:30 tight aura @t
427+25:33 name b
428+25:34 tight glyph =
429+25:35 tight aura @p
430+25:37 tight glyph ]
431+25:39 glyph (
432+25:40 tight name source
433+25:47 name x
434+25:48 tight glyph )
435+26:1 NEWLINE
436+26:1 glyph ++
437+26:4 name bare
438+26:9 name proj
439+27:1 NEWLINE
440+27:1 glyph ++
441+27:4 name alias
442+27:10 name proj
443+28:1 NEWLINE
444+28:1 glyph ++
445+28:4 name alias-use
446+28:14 glyph ^-
447+28:17 glyph [
448+28:18 tight name a
449+28:19 tight glyph =
450+28:20 tight aura @t
451+28:23 name b
452+28:24 tight glyph =
453+28:25 tight aura @p
454+28:27 tight glyph ]
455+28:29 glyph (
456+28:30 tight name alias
457+28:36 glyph [
458+28:37 tight name a
459+28:38 tight glyph =
460+28:39 tight str "hi"
461+28:44 name b
462+28:45 tight glyph =
463+28:46 tight lit ~zod
464+28:51 name c
465+28:52 tight glyph =
466+28:53 tight lit %.y
467+28:56 tight glyph ]
468+28:57 tight glyph )
469+29:1 NEWLINE
470+29:1 glyph ++
471+29:4 name two-arguments
472+29:18 glyph ^-
473+29:21 glyph [
474+29:22 tight name a
475+29:23 tight glyph =
476+29:24 tight aura @t
477+29:27 name b
478+29:28 tight glyph =
479+29:29 tight aura @p
480+29:31 tight glyph ]
481+29:33 glyph (
482+29:34 tight name proj
483+29:39 glyph [
484+29:40 tight name a
485+29:41 tight glyph =
486+29:42 tight str "hi"
487+29:47 name b
488+29:48 tight glyph =
489+29:49 tight lit ~zod
490+29:54 name c
491+29:55 tight glyph =
492+29:56 tight lit %.y
493+29:59 tight glyph ]
494+29:61 glyph [
495+29:62 tight name a
496+29:63 tight glyph =
497+29:64 tight str "x"
498+29:68 name b
499+29:69 tight glyph =
500+29:70 tight lit ~zod
501+29:75 name c
502+29:76 tight glyph =
503+29:77 tight lit %.y
504+29:80 tight glyph ]
505+29:81 tight glyph )
506+30:1 NEWLINE
507+30:1 glyph ++
508+30:4 name one-field
509+30:14 glyph ^-
510+30:17 glyph [
511+30:18 tight name a
512+30:19 tight glyph =
513+30:20 tight aura @t
514+30:22 tight glyph ]
515+30:24 glyph (
516+30:25 tight name proj
517+30:30 glyph [
518+30:31 tight name a
519+30:32 tight glyph =
520+30:33 tight str "hi"
521+30:38 name b
522+30:39 tight glyph =
523+30:40 tight lit ~zod
524+30:45 name c
525+30:46 tight glyph =
526+30:47 tight lit %.y
527+30:50 tight glyph ]
528+30:51 tight glyph )
529+31:1 NEWLINE
530+31:1 glyph ++
531+31:4 name exact-record
532+31:17 glyph ^-
533+31:20 glyph [
534+31:21 tight name a
535+31:22 tight glyph =
536+31:23 tight aura @t
537+31:26 name b
538+31:27 tight glyph =
539+31:28 tight aura @p
540+31:30 tight glyph ]
541+31:32 glyph (
542+31:33 tight name proj
543+31:38 glyph [
544+31:39 tight name a
545+31:40 tight glyph =
546+31:41 tight str "hi"
547+31:46 name b
548+31:47 tight glyph =
549+31:48 tight lit ~zod
550+31:52 tight glyph ]
551+31:53 tight glyph )
552+32:1 NEWLINE
553+32:1 glyph ++
554+32:4 name positional-generic
555+32:23 glyph |=
556+32:26 glyph [
557+32:27 tight name a
558+32:28 tight glyph =
559+32:29 tight aura @t
560+32:32 name b
561+32:33 tight glyph =
562+32:34 tight tvar B
563+32:35 tight glyph ]
564+32:37 name a
565+33:1 NEWLINE
566+33:1 glyph ++
567+33:4 name positional-generic-call
568+33:28 glyph (
569+33:29 tight name positional-generic
570+33:48 str "hi"
571+33:53 lit ~zod
572+33:58 lit %.y
573+33:61 tight glyph )
574+34:1 NEWLINE
575+34:1 glyph ++
576+34:4 name subsequence
577+34:16 glyph ^-
578+34:19 glyph [
579+34:20 tight name a
580+34:21 tight glyph =
581+34:22 tight aura @t
582+34:25 name c
583+34:26 tight glyph =
584+34:27 tight glyph ?
585+34:28 tight glyph ]
586+34:30 glyph (
587+34:31 tight name proj
588+34:36 glyph [
589+34:37 tight name a
590+34:38 tight glyph =
591+34:39 tight str "hi"
592+34:44 name b
593+34:45 tight glyph =
594+34:46 tight lit ~zod
595+34:51 name c
596+34:52 tight glyph =
597+34:53 tight lit %.y
598+34:56 tight glyph ]
599+34:57 tight glyph )
600+35:1 NEWLINE
601+35:1 glyph ++
602+35:4 name reversed
603+35:13 glyph ^-
604+35:16 glyph [
605+35:17 tight name b
606+35:18 tight glyph =
607+35:19 tight aura @p
608+35:22 name a
609+35:23 tight glyph =
610+35:24 tight aura @t
611+35:26 tight glyph ]
612+35:28 glyph (
613+35:29 tight name proj
614+35:34 glyph [
615+35:35 tight name a
616+35:36 tight glyph =
617+35:37 tight str "hi"
618+35:42 name b
619+35:43 tight glyph =
620+35:44 tight lit ~zod
621+35:49 name c
622+35:50 tight glyph =
623+35:51 tight lit %.y
624+35:54 tight glyph ]
625+35:55 tight glyph )
626+35:56 NEWLINE
tests/golden/types-proj-explicit-context/tree.txtnew file+287
@@ -0,0 +1,287 @@
1+(module
2+ (value 3:1 choose
3+ (gate 3:11
4+ (face 3:14 x
5+ (cell 3:16
6+ (face 3:17 a (aura 3:19 @t))
7+ (face 3:22 b (aura 3:24 @p))))
8+ (wing 3:28 a.x)))
9+ (value 4:1 source
10+ (gate 4:11
11+ (face 4:14 x (aura 4:16 @t))
12+ (tuple 4:19
13+ (face 4:20 a (wing 4:22 x))
14+ (face 4:24 b (lit 4:26 ~zod))
15+ (face 4:31 c (lit 4:33 %.y)))))
16+ (value 5:1 trace-extra
17+ (gate 5:16
18+ (face 5:19 x (aura 5:21 @t))
19+ (body 6:3
20+ (trace 6:3
21+ (str 6:6 "extra")
22+ (body 7:5 (wing 7:5 x))))))
23+ (value 8:1 direct
24+ (cast 8:11
25+ (cell 8:14
26+ (face 8:15 a (aura 8:17 @t))
27+ (face 8:20 b (aura 8:22 @p)))
28+ (group 8:26
29+ (call 8:27
30+ (wing 8:27 proj)
31+ (tuple 8:32
32+ (face 8:33 a (str 8:35 "hi"))
33+ (face 8:40 b (lit 8:42 ~zod))
34+ (face 8:47 c (lit 8:49 %.y)))))))
35+ (value 9:1 from-call
36+ (cast 9:14
37+ (cell 9:17
38+ (face 9:18 a (aura 9:20 @t))
39+ (face 9:23 b (aura 9:25 @p)))
40+ (group 9:29
41+ (call 9:30
42+ (wing 9:30 proj)
43+ (group 9:35
44+ (call 9:36 (wing 9:36 source) (str 9:43 "hi")))))))
45+ (value 10:1 into-call
46+ (group 10:14
47+ (call 10:15
48+ (wing 10:15 choose)
49+ (group 10:22
50+ (call 10:23
51+ (wing 10:23 proj)
52+ (tuple 10:28
53+ (face 10:29 a (str 10:31 "hi"))
54+ (face 10:36 b (lit 10:38 ~zod))
55+ (face 10:43 c (lit 10:45 %.y))))))))
56+ (value 11:1 nested
57+ (cast 11:11
58+ (cell 11:14
59+ (face 11:15 result
60+ (cell 11:22
61+ (face 11:23 a (aura 11:25 @t))
62+ (face 11:28 b (aura 11:30 @p))))
63+ (face 11:34 done (flag 11:39)))
64+ (tuple 11:42
65+ (face 11:43 result
66+ (group 11:50
67+ (call 11:51
68+ (wing 11:51 proj)
69+ (tuple 11:56
70+ (face 11:57 a (str 11:59 "hi"))
71+ (face 11:64 b (lit 11:66 ~zod))
72+ (face 11:71 c (lit 11:73 %.y))))))
73+ (face 11:79 done (lit 11:84 %.y)))))
74+ (value 12:1 generic
75+ (gate 12:12
76+ (face 12:15 x (tvar 12:17 B))
77+ (cast 12:19
78+ (cell 12:22
79+ (face 12:23 a (aura 12:25 @t))
80+ (face 12:28 b (tvar 12:30 B)))
81+ (group 12:33
82+ (call 12:34
83+ (wing 12:34 proj)
84+ (tuple 12:39
85+ (face 12:40 a (str 12:42 "hi"))
86+ (face 12:47 b (wing 12:49 x))
87+ (face 12:51 c (lit 12:53 %.y))))))))
88+ (value 13:1 no-context
89+ (group 13:15
90+ (call 13:16
91+ (wing 13:16 proj)
92+ (tuple 13:21
93+ (face 13:22 a (str 13:24 "hi"))
94+ (face 13:29 b (lit 13:31 ~zod))
95+ (face 13:36 c (lit 13:38 %.y))))))
96+ (value 14:1 unknown-target
97+ (gate 14:19
98+ (bind 14:22 x)
99+ (group 14:24
100+ (call 14:25 (wing 14:25 proj) (wing 14:30 x)))))
101+ (value 15:1 missing
102+ (cast 15:12
103+ (cell 15:15
104+ (face 15:16 a (aura 15:18 @t))
105+ (face 15:21 b (aura 15:23 @p)))
106+ (group 15:27
107+ (call 15:28
108+ (wing 15:28 proj)
109+ (tuple 15:33
110+ (face 15:34 a (str 15:36 "hi"))
111+ (face 15:41 c (lit 15:43 %.y))
112+ (face 15:47 d (lit 15:49 ~zod)))))))
113+ (value 16:1 incompatible
114+ (cast 16:17
115+ (cell 16:20
116+ (face 16:21 a (aura 16:23 @t))
117+ (face 16:26 b (aura 16:28 @p)))
118+ (group 16:32
119+ (call 16:33
120+ (wing 16:33 proj)
121+ (tuple 16:38
122+ (face 16:39 a (str 16:41 "hi"))
123+ (face 16:46 b (str 16:48 "wrong"))
124+ (face 16:56 c (lit 16:58 %.y)))))))
125+ (value 17:1 trace-extra-field
126+ (cast 17:22
127+ (cell 17:25
128+ (face 17:26 a (aura 17:28 @t))
129+ (face 17:31 b (aura 17:33 @p)))
130+ (group 17:37
131+ (call 17:38
132+ (wing 17:38 proj)
133+ (tuple 17:43
134+ (face 17:44 a (str 17:46 "hi"))
135+ (face 17:51 b (lit 17:53 ~zod))
136+ (face 17:58 c
137+ (group 17:60
138+ (call 17:61 (wing 17:61 trace-extra) (str 17:73 "once")))))))))
139+ (value 18:1 pending-tag
140+ (cast 18:16
141+ (cell 18:19
142+ (face 18:20 a (aura 18:22 @t))
143+ (face 18:25 b (aura 18:27 @p)))
144+ (group 18:31
145+ (call 18:32
146+ (wing 18:32 proj)
147+ (tuple 18:37
148+ (face 18:38 a (str 18:40 "hi"))
149+ (face 18:45 b (lit 18:47 ~zod))
150+ (face 18:52 c (lit 18:54 %orphan)))))))
151+ (value 19:1 pending-null
152+ (cast 19:17
153+ (cell 19:20
154+ (face 19:21 a (aura 19:23 @t))
155+ (face 19:26 b (aura 19:28 @p)))
156+ (group 19:32
157+ (call 19:33
158+ (wing 19:33 proj)
159+ (tuple 19:38
160+ (face 19:39 a (str 19:41 "hi"))
161+ (face 19:46 b (lit 19:48 ~zod))
162+ (face 19:53 c (lit 19:55 ~)))))))
163+ (value 20:1 positional
164+ (cast 20:15
165+ (cell 20:18
166+ (face 20:19 a (aura 20:21 @t))
167+ (face 20:24 b (aura 20:26 @p)))
168+ (group 20:30
169+ (call 20:31 (wing 20:31 proj) (str 20:36 "hi") (lit 20:41 ~zod) (lit 20:46 %.y)))))
170+ (value 21:1 not-record
171+ (cast 21:15
172+ (cell 21:18
173+ (face 21:19 a (aura 21:21 @t))
174+ (face 21:24 b (aura 21:26 @p)))
175+ (group 21:30
176+ (call 21:31 (wing 21:31 proj) (str 21:36 "hi")))))
177+ (value 23:1 bare-cast
178+ (cast 23:14
179+ (cell 23:17
180+ (face 23:18 a (aura 23:20 @t))
181+ (face 23:23 b (aura 23:25 @p)))
182+ (tuple 23:29
183+ (face 23:30 a (str 23:32 "hi"))
184+ (face 23:37 b (lit 23:39 ~zod))
185+ (face 23:44 c (lit 23:46 %.y)))))
186+ (value 24:1 bare-call
187+ (group 24:14
188+ (call 24:15
189+ (wing 24:15 choose)
190+ (tuple 24:22
191+ (face 24:23 a (str 24:25 "hi"))
192+ (face 24:30 b (lit 24:32 ~zod))
193+ (face 24:37 c (lit 24:39 %.y))))))
194+ (value 25:1 bare-result
195+ (gate 25:16
196+ (face 25:19 x (aura 25:21 @t))
197+ (cast 25:24
198+ (cell 25:27
199+ (face 25:28 a (aura 25:30 @t))
200+ (face 25:33 b (aura 25:35 @p)))
201+ (group 25:39
202+ (call 25:40 (wing 25:40 source) (wing 25:47 x))))))
203+ (value 26:1 bare (wing 26:9 proj))
204+ (value 27:1 alias (wing 27:10 proj))
205+ (value 28:1 alias-use
206+ (cast 28:14
207+ (cell 28:17
208+ (face 28:18 a (aura 28:20 @t))
209+ (face 28:23 b (aura 28:25 @p)))
210+ (group 28:29
211+ (call 28:30
212+ (wing 28:30 alias)
213+ (tuple 28:36
214+ (face 28:37 a (str 28:39 "hi"))
215+ (face 28:44 b (lit 28:46 ~zod))
216+ (face 28:51 c (lit 28:53 %.y)))))))
217+ (value 29:1 two-arguments
218+ (cast 29:18
219+ (cell 29:21
220+ (face 29:22 a (aura 29:24 @t))
221+ (face 29:27 b (aura 29:29 @p)))
222+ (group 29:33
223+ (call 29:34
224+ (wing 29:34 proj)
225+ (tuple 29:39
226+ (face 29:40 a (str 29:42 "hi"))
227+ (face 29:47 b (lit 29:49 ~zod))
228+ (face 29:54 c (lit 29:56 %.y)))
229+ (tuple 29:61
230+ (face 29:62 a (str 29:64 "x"))
231+ (face 29:68 b (lit 29:70 ~zod))
232+ (face 29:75 c (lit 29:77 %.y)))))))
233+ (value 30:1 one-field
234+ (cast 30:14
235+ (cell 30:17
236+ (face 30:18 a (aura 30:20 @t)))
237+ (group 30:24
238+ (call 30:25
239+ (wing 30:25 proj)
240+ (tuple 30:30
241+ (face 30:31 a (str 30:33 "hi"))
242+ (face 30:38 b (lit 30:40 ~zod))
243+ (face 30:45 c (lit 30:47 %.y)))))))
244+ (value 31:1 exact-record
245+ (cast 31:17
246+ (cell 31:20
247+ (face 31:21 a (aura 31:23 @t))
248+ (face 31:26 b (aura 31:28 @p)))
249+ (group 31:32
250+ (call 31:33
251+ (wing 31:33 proj)
252+ (tuple 31:38
253+ (face 31:39 a (str 31:41 "hi"))
254+ (face 31:46 b (lit 31:48 ~zod)))))))
255+ (value 32:1 positional-generic
256+ (gate 32:23
257+ (cell 32:26
258+ (face 32:27 a (aura 32:29 @t))
259+ (face 32:32 b (tvar 32:34 B)))
260+ (wing 32:37 a)))
261+ (value 33:1 positional-generic-call
262+ (group 33:28
263+ (call 33:29 (wing 33:29 positional-generic) (str 33:48 "hi") (lit 33:53 ~zod) (lit 33:58 %.y))))
264+ (value 34:1 subsequence
265+ (cast 34:16
266+ (cell 34:19
267+ (face 34:20 a (aura 34:22 @t))
268+ (face 34:25 c (flag 34:27)))
269+ (group 34:30
270+ (call 34:31
271+ (wing 34:31 proj)
272+ (tuple 34:36
273+ (face 34:37 a (str 34:39 "hi"))
274+ (face 34:44 b (lit 34:46 ~zod))
275+ (face 34:51 c (lit 34:53 %.y)))))))
276+ (value 35:1 reversed
277+ (cast 35:13
278+ (cell 35:16
279+ (face 35:17 b (aura 35:19 @p))
280+ (face 35:22 a (aura 35:24 @t)))
281+ (group 35:28
282+ (call 35:29
283+ (wing 35:29 proj)
284+ (tuple 35:34
285+ (face 35:35 a (str 35:37 "hi"))
286+ (face 35:42 b (lit 35:44 ~zod))
287+ (face 35:49 c (lit 35:51 %.y))))))))
tests/golden/types-proj-explicit-context/types.txtnew file+31
@@ -0,0 +1,31 @@
1+partial inference; module not checked
2+++ choose: $-([a=@t b=@p] @t)
3+++ source: $-(@t [a=@t [b=@p c=?]])
4+++ trace-extra: $-(@t @t)
5+++ direct: [a=@t b=@p]
6+++ from-call: [a=@t b=@p]
7+++ into-call: @t
8+++ nested: proj needs an expected record type
9+++ generic: $-(A [a=@t b=A])
10+++ no-context: proj needs an expected record type
11+++ unknown-target: proj needs an expected record type
12+++ missing: proj constraint needs unsupported inference
13+++ incompatible: proj constraint needs unsupported inference
14+++ trace-extra-field: [a=@t b=@p]
15+++ pending-tag: tag needs context in partial inference
16+++ pending-null: `~` needs context in partial inference
17+++ positional: name is not available to partial inference
18+++ not-record: proj needs a known record containing its expected fields
19+++ bare-cast: record width constraint needs unsupported inference
20+++ bare-call: record width constraint needs unsupported inference
21+++ bare-result: record width constraint needs unsupported inference
22+++ bare: name is not available to partial inference
23+++ alias: name is not available to partial inference
24+++ alias-use: name is not available to partial inference
25+++ two-arguments: name is not available to partial inference
26+++ one-field: proj needs an expected record type
27+++ exact-record: [a=@t b=@p]
28+++ positional-generic: $-([a=@t b=A] @t)
29+++ positional-generic-call: @t
30+++ subsequence: [a=@t c=?]
31+++ reversed: proj constraint needs unsupported inference
tests/golden/types-proj-nested-no-implicit/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A wider record at each nested call site must fail closed; an ambiguous generic tail may report unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-nested-no-implicit/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-nested-no-implicit/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ sink-unit |= v=(unit [a=@t b=B]) "ok"
2+++ unit-bad (sink-unit `[a="x" b=~zod c=%.y])
3+++ sink-list |= v=(list [a=@t b=B]) "ok"
4+++ list-bad (sink-list ~[[a="x" b=~zod c=%.y]])
5+++ sink-nested |= v=[one=[a=@t b=B] other=@ud] "ok"
6+++ nested-bad (sink-nested [one=[a="x" b=~zod c=%.y] other=0])
tests/golden/types-proj-nested-no-implicit/tokens.txtnew file+119
@@ -0,0 +1,119 @@
1+1:1 glyph ++
2+1:4 name sink-unit
3+1:14 glyph |=
4+1:17 name v
5+1:18 tight glyph =
6+1:19 tight glyph (
7+1:20 tight name unit
8+1:25 glyph [
9+1:26 tight name a
10+1:27 tight glyph =
11+1:28 tight aura @t
12+1:31 name b
13+1:32 tight glyph =
14+1:33 tight tvar B
15+1:34 tight glyph ]
16+1:35 tight glyph )
17+1:37 str "ok"
18+2:1 NEWLINE
19+2:1 glyph ++
20+2:4 name unit-bad
21+2:13 glyph (
22+2:14 tight name sink-unit
23+2:24 glyph `
24+2:25 tight glyph [
25+2:26 tight name a
26+2:27 tight glyph =
27+2:28 tight str "x"
28+2:32 name b
29+2:33 tight glyph =
30+2:34 tight lit ~zod
31+2:39 name c
32+2:40 tight glyph =
33+2:41 tight lit %.y
34+2:44 tight glyph ]
35+2:45 tight glyph )
36+3:1 NEWLINE
37+3:1 glyph ++
38+3:4 name sink-list
39+3:14 glyph |=
40+3:17 name v
41+3:18 tight glyph =
42+3:19 tight glyph (
43+3:20 tight name list
44+3:25 glyph [
45+3:26 tight name a
46+3:27 tight glyph =
47+3:28 tight aura @t
48+3:31 name b
49+3:32 tight glyph =
50+3:33 tight tvar B
51+3:34 tight glyph ]
52+3:35 tight glyph )
53+3:37 str "ok"
54+4:1 NEWLINE
55+4:1 glyph ++
56+4:4 name list-bad
57+4:13 glyph (
58+4:14 tight name sink-list
59+4:24 glyph ~[
60+4:26 tight glyph [
61+4:27 tight name a
62+4:28 tight glyph =
63+4:29 tight str "x"
64+4:33 name b
65+4:34 tight glyph =
66+4:35 tight lit ~zod
67+4:40 name c
68+4:41 tight glyph =
69+4:42 tight lit %.y
70+4:45 tight glyph ]
71+4:46 tight glyph ]
72+4:47 tight glyph )
73+5:1 NEWLINE
74+5:1 glyph ++
75+5:4 name sink-nested
76+5:16 glyph |=
77+5:19 name v
78+5:20 tight glyph =
79+5:21 tight glyph [
80+5:22 tight name one
81+5:25 tight glyph =
82+5:26 tight glyph [
83+5:27 tight name a
84+5:28 tight glyph =
85+5:29 tight aura @t
86+5:32 name b
87+5:33 tight glyph =
88+5:34 tight tvar B
89+5:35 tight glyph ]
90+5:37 name other
91+5:42 tight glyph =
92+5:43 tight aura @ud
93+5:46 tight glyph ]
94+5:48 str "ok"
95+6:1 NEWLINE
96+6:1 glyph ++
97+6:4 name nested-bad
98+6:15 glyph (
99+6:16 tight name sink-nested
100+6:28 glyph [
101+6:29 tight name one
102+6:32 tight glyph =
103+6:33 tight glyph [
104+6:34 tight name a
105+6:35 tight glyph =
106+6:36 tight str "x"
107+6:40 name b
108+6:41 tight glyph =
109+6:42 tight lit ~zod
110+6:47 name c
111+6:48 tight glyph =
112+6:49 tight lit %.y
113+6:52 tight glyph ]
114+6:54 name other
115+6:59 tight glyph =
116+6:60 tight lit 0
117+6:61 tight glyph ]
118+6:62 tight glyph )
119+6:63 NEWLINE
tests/golden/types-proj-nested-no-implicit/tree.txtnew file+56
@@ -0,0 +1,56 @@
1+(module
2+ (value 1:1 sink-unit
3+ (gate 1:14
4+ (face 1:17 v
5+ (apply 1:19 unit
6+ (cell 1:25
7+ (face 1:26 a (aura 1:28 @t))
8+ (face 1:31 b (tvar 1:33 B)))))
9+ (str 1:37 "ok")))
10+ (value 2:1 unit-bad
11+ (group 2:13
12+ (call 2:14
13+ (wing 2:14 sink-unit)
14+ (unit 2:24
15+ (tuple 2:25
16+ (face 2:26 a (str 2:28 "x"))
17+ (face 2:32 b (lit 2:34 ~zod))
18+ (face 2:39 c (lit 2:41 %.y)))))))
19+ (value 3:1 sink-list
20+ (gate 3:14
21+ (face 3:17 v
22+ (apply 3:19 list
23+ (cell 3:25
24+ (face 3:26 a (aura 3:28 @t))
25+ (face 3:31 b (tvar 3:33 B)))))
26+ (str 3:37 "ok")))
27+ (value 4:1 list-bad
28+ (group 4:13
29+ (call 4:14
30+ (wing 4:14 sink-list)
31+ (list 4:24
32+ (tuple 4:26
33+ (face 4:27 a (str 4:29 "x"))
34+ (face 4:33 b (lit 4:35 ~zod))
35+ (face 4:40 c (lit 4:42 %.y)))))))
36+ (value 5:1 sink-nested
37+ (gate 5:16
38+ (face 5:19 v
39+ (cell 5:21
40+ (face 5:22 one
41+ (cell 5:26
42+ (face 5:27 a (aura 5:29 @t))
43+ (face 5:32 b (tvar 5:34 B))))
44+ (face 5:37 other (aura 5:43 @ud))))
45+ (str 5:48 "ok")))
46+ (value 6:1 nested-bad
47+ (group 6:15
48+ (call 6:16
49+ (wing 6:16 sink-nested)
50+ (tuple 6:28
51+ (face 6:29 one
52+ (tuple 6:33
53+ (face 6:34 a (str 6:36 "x"))
54+ (face 6:40 b (lit 6:42 ~zod))
55+ (face 6:47 c (lit 6:49 %.y))))
56+ (face 6:54 other (lit 6:60 0)))))))
tests/golden/types-proj-nested-no-implicit/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2+++ sink-unit: $-((unit [a=@t b=A]) @t)
3+++ unit-bad: unit payload constraint is not supported by partial inference
4+++ sink-list: $-((list [a=@t b=A]) @t)
5+++ list-bad: list item constraint is not supported by partial inference
6+++ sink-nested: $-([one=[a=@t b=A] other=@ud] @t)
7+++ nested-bad: call constraint is not supported by partial inference
tests/golden/types-proj-reserved-imported-definition/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A reachable imported module cannot define proj, even if the definition is unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-imported-definition/module-trees.txtnew file+10
@@ -0,0 +1,10 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 proj
4+ (gate 1:9
5+ (face 1:12 x (aura 1:14 @t))
6+ (wing 1:17 x)))
7+ (value 2:1 identity
8+ (gate 2:13
9+ (face 2:16 x (aura 2:18 @t))
10+ (wing 2:21 x))))
tests/golden/types-proj-reserved-imported-definition/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-proj-reserved-imported-definition/modules/ui/lib.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ proj |= x=@t x
2+++ identity |= x=@t x
tests/golden/types-proj-reserved-imported-definition/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ okay "ok"
tests/golden/types-proj-reserved-imported-definition/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name okay
10+2:9 str "ok"
11+2:13 NEWLINE
tests/golden/types-proj-reserved-imported-definition/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-imported-definition/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names: /ui/lib/jibb
tests/golden/types-proj-reserved-jibb-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Jibb import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-jibb-import/module-trees.txtnew file+6
@@ -0,0 +1,6 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate 1:13
5+ (face 1:16 x (aura 1:18 @t))
6+ (wing 1:21 x))))
tests/golden/types-proj-reserved-jibb-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-proj-reserved-jibb-import/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |= x=@t x
tests/golden/types-proj-reserved-jibb-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= proj /ui/lib
2+++ okay "ok"
tests/golden/types-proj-reserved-jibb-import/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name proj
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name okay
10+2:9 str "ok"
11+2:13 NEWLINE
tests/golden/types-proj-reserved-jibb-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 proj /ui/lib)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-jibb-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-local-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A local mold cannot use proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-local-mold/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-local-mold/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay
2+ +$ proj @t
3+ "ok"
tests/golden/types-proj-reserved-local-mold/tokens.txtnew file+10
@@ -0,0 +1,10 @@
1+1:1 glyph ++
2+1:4 name okay
3+2:3 INDENT
4+2:3 glyph +$
5+2:6 name proj
6+2:11 aura @t
7+3:3 NEWLINE
8+3:3 str "ok"
9+3:7 DEDENT
10+3:7 NEWLINE
tests/golden/types-proj-reserved-local-mold/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (value 1:1 okay
3+ (body 2:3
4+ (mold 2:3 proj (aura 2:11 @t))
5+ (str 3:3 "ok"))))
tests/golden/types-proj-reserved-local-mold/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-local/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An otherwise valid local value cannot use proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-local/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-local/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay
2+ ++ proj |= x=@t x
3+ "ok"
tests/golden/types-proj-reserved-local/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph ++
2+1:4 name okay
3+2:3 INDENT
4+2:3 glyph ++
5+2:6 name proj
6+2:11 glyph |=
7+2:14 name x
8+2:15 tight glyph =
9+2:16 tight aura @t
10+2:19 name x
11+3:3 NEWLINE
12+3:3 str "ok"
13+3:7 DEDENT
14+3:7 NEWLINE
tests/golden/types-proj-reserved-local/tree.txtnew file+8
@@ -0,0 +1,8 @@
1+(module
2+ (value 1:1 okay
3+ (body 2:3
4+ (value 2:3 proj
5+ (gate 2:11
6+ (face 2:14 x (aura 2:16 @t))
7+ (wing 2:19 x)))
8+ (str 3:3 "ok"))))
tests/golden/types-proj-reserved-local/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-mark-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Hoon mark import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-mark-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-mark-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %proj
2+++ okay "ok"
tests/golden/types-proj-reserved-mark-import/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph /%
2+1:4 lit %proj
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name okay
6+2:9 str "ok"
7+2:13 NEWLINE
tests/golden/types-proj-reserved-mark-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mark 1:1 %proj)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-mark-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A top-level mold named proj is rejected even when unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-mold/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ proj @t
2+++ okay "ok"
tests/golden/types-proj-reserved-mold/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph +$
2+1:4 name proj
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph ++
6+2:4 name okay
7+2:9 str "ok"
8+2:13 NEWLINE
tests/golden/types-proj-reserved-mold/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mold 1:1 proj (aura 1:9 @t))
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-mold/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-pattern/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A branch pattern cannot bind proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-pattern/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-pattern/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay |= x=[@t @p]
2+ ?- x
3+ [proj other] proj
tests/golden/types-proj-reserved-pattern/tokens.txtnew file+21
@@ -0,0 +1,21 @@
1+1:1 glyph ++
2+1:4 name okay
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight glyph [
7+1:15 tight aura @t
8+1:18 aura @p
9+1:20 tight glyph ]
10+2:3 INDENT
11+2:3 glyph ?-
12+2:6 name x
13+3:5 INDENT
14+3:5 glyph [
15+3:6 tight name proj
16+3:11 name other
17+3:16 tight glyph ]
18+3:18 name proj
19+3:22 DEDENT
20+3:22 DEDENT
21+3:22 NEWLINE
tests/golden/types-proj-reserved-pattern/tree.txtnew file+11
@@ -0,0 +1,11 @@
1+(module
2+ (value 1:1 okay
3+ (gate 1:9
4+ (face 1:12 x
5+ (cell 1:14 (aura 1:15 @t) (aura 1:18 @p)))
6+ (body 2:3
7+ (branch 2:3
8+ (wing 2:6 x)
9+ (arm 3:5
10+ (cell 3:5 (bind 3:6 proj) (bind 3:11 other))
11+ (wing 3:18 proj)))))))
tests/golden/types-proj-reserved-pattern/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-positive/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A normal projection, a distinct binding, a field label and a term tag with this spelling.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-positive/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-positive/source.jibbnew file+8
@@ -0,0 +1,8 @@
1++$ action
2+ %proj
3+ %other
4+++ projection |= x=@t x
5+++ label |= x=[proj=@t other=@p] proj.x
6+++ tag ^- action %proj
7+++ use ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])
8+++ similar (projection "okay")
tests/golden/types-proj-reserved-positive/tokens.txtnew file+70
@@ -0,0 +1,70 @@
1+1:1 glyph +$
2+1:4 name action
3+2:3 INDENT
4+2:3 lit %proj
5+3:3 NEWLINE
6+3:3 lit %other
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph ++
10+4:4 name projection
11+4:15 glyph |=
12+4:18 name x
13+4:19 tight glyph =
14+4:20 tight aura @t
15+4:23 name x
16+5:1 NEWLINE
17+5:1 glyph ++
18+5:4 name label
19+5:10 glyph |=
20+5:13 name x
21+5:14 tight glyph =
22+5:15 tight glyph [
23+5:16 tight name proj
24+5:20 tight glyph =
25+5:21 tight aura @t
26+5:24 name other
27+5:29 tight glyph =
28+5:30 tight aura @p
29+5:32 tight glyph ]
30+5:34 wing proj.x
31+6:1 NEWLINE
32+6:1 glyph ++
33+6:4 name tag
34+6:8 glyph ^-
35+6:11 name action
36+6:18 lit %proj
37+7:1 NEWLINE
38+7:1 glyph ++
39+7:4 name use
40+7:8 glyph ^-
41+7:11 glyph [
42+7:12 tight name a
43+7:13 tight glyph =
44+7:14 tight aura @t
45+7:17 name b
46+7:18 tight glyph =
47+7:19 tight aura @p
48+7:21 tight glyph ]
49+7:23 glyph (
50+7:24 tight name proj
51+7:29 glyph [
52+7:30 tight name a
53+7:31 tight glyph =
54+7:32 tight str "hi"
55+7:37 name b
56+7:38 tight glyph =
57+7:39 tight lit ~zod
58+7:44 name c
59+7:45 tight glyph =
60+7:46 tight lit %.y
61+7:49 tight glyph ]
62+7:50 tight glyph )
63+8:1 NEWLINE
64+8:1 glyph ++
65+8:4 name similar
66+8:12 glyph (
67+8:13 tight name projection
68+8:24 str "okay"
69+8:30 tight glyph )
70+8:31 NEWLINE
tests/golden/types-proj-reserved-positive/tree.txtnew file+31
@@ -0,0 +1,31 @@
1+(module
2+ (mold 1:1 action
3+ (union 2:3 (const 2:3 %proj) (const 3:3 %other)))
4+ (value 4:1 projection
5+ (gate 4:15
6+ (face 4:18 x (aura 4:20 @t))
7+ (wing 4:23 x)))
8+ (value 5:1 label
9+ (gate 5:10
10+ (face 5:13 x
11+ (cell 5:15
12+ (face 5:16 proj (aura 5:21 @t))
13+ (face 5:24 other (aura 5:30 @p))))
14+ (wing 5:34 proj.x)))
15+ (value 6:1 tag
16+ (cast 6:8 (ref 6:11 action) (lit 6:18 %proj)))
17+ (value 7:1 use
18+ (cast 7:8
19+ (cell 7:11
20+ (face 7:12 a (aura 7:14 @t))
21+ (face 7:17 b (aura 7:19 @p)))
22+ (group 7:23
23+ (call 7:24
24+ (wing 7:24 proj)
25+ (tuple 7:29
26+ (face 7:30 a (str 7:32 "hi"))
27+ (face 7:37 b (lit 7:39 ~zod))
28+ (face 7:44 c (lit 7:46 %.y)))))))
29+ (value 8:1 similar
30+ (group 8:12
31+ (call 8:13 (wing 8:13 projection) (str 8:24 "okay")))))
tests/golden/types-proj-reserved-positive/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2++$ action: cases proven disjoint; mold not checked
3+++ projection: $-(@t @t)
4+++ label: $-([proj=@t other=@p] @t)
5+++ tag: action
6+++ use: [a=@t b=@p]
7+++ similar: @t
tests/golden/types-proj-reserved-sample/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A gate sample cannot bind proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-sample/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-sample/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ okay |= proj=@t proj
tests/golden/types-proj-reserved-sample/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph ++
2+1:4 name okay
3+1:9 glyph |=
4+1:12 name proj
5+1:16 tight glyph =
6+1:17 tight aura @t
7+1:20 name proj
8+1:24 NEWLINE
tests/golden/types-proj-reserved-sample/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (value 1:1 okay
3+ (gate 1:9
4+ (face 1:12 proj (aura 1:17 @t))
5+ (wing 1:20 proj))))
tests/golden/types-proj-reserved-sample/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-sur-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Hoon sur import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-sur-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-sur-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/- proj
2+++ okay "ok"
tests/golden/types-proj-reserved-sur-import/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph /-
2+1:4 name proj
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name okay
6+2:9 str "ok"
7+2:13 NEWLINE
tests/golden/types-proj-reserved-sur-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (sur 1:1 proj)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-sur-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-pattern/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-pattern/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-pattern/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ outer |= n=@t
2+ ++ unused |= pair=[@t @p]
3+ ?- pair
4+ [proj other] (unknown %orphan)
5+ n
6+++ okay "ok"
tests/golden/types-proj-reserved-unused-pattern/tokens.txtnew file+38
@@ -0,0 +1,38 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+2:13 glyph |=
11+2:16 name pair
12+2:20 tight glyph =
13+2:21 tight glyph [
14+2:22 tight aura @t
15+2:25 aura @p
16+2:27 tight glyph ]
17+3:5 INDENT
18+3:5 glyph ?-
19+3:8 name pair
20+4:7 INDENT
21+4:7 glyph [
22+4:8 tight name proj
23+4:13 name other
24+4:18 tight glyph ]
25+4:20 glyph (
26+4:21 tight name unknown
27+4:29 lit %orphan
28+4:36 tight glyph )
29+5:3 DEDENT
30+5:3 DEDENT
31+5:3 NEWLINE
32+5:3 name n
33+6:1 DEDENT
34+6:1 NEWLINE
35+6:1 glyph ++
36+6:4 name okay
37+6:9 str "ok"
38+6:13 NEWLINE
tests/golden/types-proj-reserved-unused-pattern/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (gate 2:13
8+ (face 2:16 pair
9+ (cell 2:21 (aura 2:22 @t) (aura 2:25 @p)))
10+ (body 3:5
11+ (branch 3:5
12+ (wing 3:8 pair)
13+ (arm 4:7
14+ (cell 4:7 (bind 4:8 proj) (bind 4:13 other))
15+ (group 4:20
16+ (call 4:21 (wing 4:21 unknown) (lit 4:29 %orphan))))))))
17+ (wing 5:3 n))))
18+ (value 6:1 okay (str 6:9 "ok")))
tests/golden/types-proj-reserved-unused-pattern/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-sample/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-sample/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-sample/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+++ outer |= n=@t
2+ ++ unused |= proj=@p (unknown %orphan)
3+ n
4+++ okay "ok"
tests/golden/types-proj-reserved-unused-sample/tokens.txtnew file+25
@@ -0,0 +1,25 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+2:13 glyph |=
11+2:16 name proj
12+2:20 tight glyph =
13+2:21 tight aura @p
14+2:24 glyph (
15+2:25 tight name unknown
16+2:33 lit %orphan
17+2:40 tight glyph )
18+3:3 NEWLINE
19+3:3 name n
20+4:1 DEDENT
21+4:1 NEWLINE
22+4:1 glyph ++
23+4:4 name okay
24+4:9 str "ok"
25+4:13 NEWLINE
tests/golden/types-proj-reserved-unused-sample/tree.txtnew file+12
@@ -0,0 +1,12 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (gate 2:13
8+ (face 2:16 proj (aura 2:21 @p))
9+ (group 2:24
10+ (call 2:25 (wing 2:25 unknown) (lit 2:33 %orphan)))))
11+ (wing 3:3 n))))
12+ (value 4:1 okay (str 4:9 "ok")))
tests/golden/types-proj-reserved-unused-sample/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-value/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ outer |= n=@t
2+ ++ unused
3+ ++ proj |= x=@t x
4+ (unknown %orphan)
5+ n
6+++ okay "ok"
tests/golden/types-proj-reserved-unused-value/tokens.txtnew file+31
@@ -0,0 +1,31 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+3:5 INDENT
11+3:5 glyph ++
12+3:8 name proj
13+3:13 glyph |=
14+3:16 name x
15+3:17 tight glyph =
16+3:18 tight aura @t
17+3:21 name x
18+4:5 NEWLINE
19+4:5 glyph (
20+4:6 tight name unknown
21+4:14 lit %orphan
22+4:21 tight glyph )
23+5:3 DEDENT
24+5:3 NEWLINE
25+5:3 name n
26+6:1 DEDENT
27+6:1 NEWLINE
28+6:1 glyph ++
29+6:4 name okay
30+6:9 str "ok"
31+6:13 NEWLINE
tests/golden/types-proj-reserved-unused-value/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (body 3:5
8+ (value 3:5 proj
9+ (gate 3:13
10+ (face 3:16 x (aura 3:18 @t))
11+ (wing 3:21 x)))
12+ (group 4:5
13+ (call 4:6 (wing 4:6 unknown) (lit 4:14 %orphan)))))
14+ (wing 5:3 n))))
15+ (value 6:1 okay (str 6:9 "ok")))
tests/golden/types-proj-reserved-unused-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A top-level value named proj is rejected even when unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-value/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ proj |= x=@t x
2+++ okay "ok"
tests/golden/types-proj-reserved-value/tokens.txtnew file+12
@@ -0,0 +1,12 @@
1+1:1 glyph ++
2+1:4 name proj
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight aura @t
7+1:17 name x
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name okay
11+2:9 str "ok"
12+2:13 NEWLINE
tests/golden/types-proj-reserved-value/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (value 1:1 proj
3+ (gate 1:9
4+ (face 1:12 x (aura 1:14 @t))
5+ (wing 1:17 x)))
6+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-tuple-context-nested/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Literals by context: tags and null take their type from context; Molds: faces are part of record types and distinct specific auras do not unify.
2−tests: Context passes through nested faced records to union tags, lists and case constructors. Wrong tags, faces, counts, later list items, repeated generic parameters and constructors fail with sites. An unknown callee and unrelated pending tag or null remain unresolved.
2+tests: Context passes through nested faced records to union tags, lists and case constructors. Wrong tags, faces, counts, later list items, repeated generic parameters and constructors fail with sites where a mismatch is proved. The extra-field case now reports unsupported: the partial checker cannot prove a cell-shaped tail cannot fit a list. An unknown callee and unrelated pending tag or null remain unresolved.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-tuple-context-nested/types.txt+1−7
@@ -16,13 +16,7 @@ partial inference; module not checked
1616/tests/golden/types-tuple-context-nested/source.jibb:7:19: argument
1717++ bad-face (take [wrong=%go xs=~])
1818 ^
19−++ extra: call's sample and argument types do not unify
20−/tests/golden/types-tuple-context-nested/source.jibb:8:11: called gate
21−++ extra (take [payload=%go xs=~ extra="x"])
22− ^
23−/tests/golden/types-tuple-context-nested/source.jibb:8:16: argument
24−++ extra (take [payload=%go xs=~ extra="x"])
25− ^
19+++ extra: record width constraint needs unsupported inference
2620++ nest: $-([data=[payload=msg xs=(list @t)] z=@p] [data=[payload=msg xs=(list @t)] z=@p])
2721++ nested: [data=[payload=msg xs=(list @t)] z=@p]
2822++ unconstrained: `~` needs context in partial inference
tests/lib/jibb-proj-guards.hoonnew file+85
@@ -0,0 +1,85 @@
1+:: Explicit proj retains lowering evidence and is reserved for API bindings.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+|%
6+++ proj-guard-errors
7+ ^- (list tape)
8+ =/ src=@t '++ exact ^- [a=@t b=@p] (proj [a="hi" b=~zod])\0a++ wider ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a++ effect |= x=@t\0a ~& "effect"\0a x\0a++ traced ^- [a=@t b=@p] (proj [a="hi" b=~zod c=(effect "once")])\0a'
9+ =/ result=jfile-result:jibb (infer-jibb-file:jibb /ui/record/jibb src ~ ~ ~ ~ ~ ~ ~ ~)
10+ ?: ?=(%| -.result) ~["proj evidence fixture did not infer"]
11+ =/ defs=(list iwidth-definition:jibb) elaborations.iface.p.result
12+ =/ exact=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%exact name.d)))
13+ =/ wider=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%wider name.d)))
14+ =/ traced=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%traced name.d)))
15+ ?~ exact ~["exact-width proj lacks lowering evidence"]
16+ ?~ wider ~["wider proj lacks lowering evidence"]
17+ ?~ traced ~["traced proj lacks lowering evidence"]
18+ ?: |(!=(1 (lent projections.i.exact)) !=(1 (lent projections.i.wider)))
19+ ~["proj evidence has an unexpected number of actions"]
20+ ?~ projections.i.exact ~["exact-width proj action is missing"]
21+ =/ call=expr:jibb original.i.projections.i.exact
22+ ?. ?=(%call -.call) ~["exact-width proj did not retain its call"]
23+ ?. ?=(%wing -.head.call) ~["exact-width proj head is not a wing"]
24+ ?. =(names.head.call ~[%proj]) ~["exact-width proj head is not proj"]
25+ ?. =(steps.i.projections.i.exact ~[[%a 2] [%b 3]]) ~["exact-width proj has incorrect field axes"]
26+ ?: !=(1 (lent projections.i.traced)) ~["traced proj has an unexpected number of actions"]
27+ ?~ projections.i.traced ~["traced proj action is missing"]
28+ =/ traced-call=expr:jibb original.i.projections.i.traced
29+ ?. ?=(%call -.traced-call) ~["traced proj did not retain its call"]
30+ ?. ?=([* ~] args.traced-call) ~["traced proj did not retain one source expression"]
31+ =/ traced-record=expr:jibb i.args.traced-call
32+ ?. ?=(%tuple -.traced-record) ~["traced proj source is not a record"]
33+ =/ fields=(list item:jibb) items.traced-record
34+ ?~ fields ~["traced proj source lacks first field"]
35+ ?~ t.fields ~["traced proj source lacks second field"]
36+ ?~ t.t.fields ~["traced proj source lacks discarded field"]
37+ =/ effect=expr:jibb val.i.t.t.fields
38+ ?. ?=(%group -.effect) ~["discarded effect source was not retained"]
39+ ?. ?=(%call -.inner.effect) ~["discarded effect call was not retained"]
40+ =/ valid-src=@t '/% %todo\0a+$ paths [%safe /proj todo]\0a'
41+ =/ clash-src=@t '/% %todo\0a+$ paths [%proj /safe todo]\0a'
42+ =/ poke-src=@t '/% %proj\0a+$ poke proj\0a'
43+ =/ valid=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb valid-src)
44+ =/ clash=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb clash-src)
45+ =/ poke=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb poke-src)
46+ ?: |(?=(%| -.valid) ?=(%| -.clash) ?=(%| -.poke)) ~["API reservation controls did not parse"]
47+ =/ todo=imark-externals:jibb ~[[%todo [%& [%atom %t ~]]]]
48+ =/ proj-mark=imark-externals:jibb ~[[%proj [%& [%atom %t ~]]]]
49+ =/ good=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.valid todo ~ ~)
50+ =/ bad=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.clash todo ~ ~)
51+ ?~ good ~["a literal /proj path was rejected"]
52+ ?^ bad ~["an API-derived proj path name was accepted"]
53+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb real-prelude real-internal)
54+ ?~ prepared ~["real prelude did not prepare"]
55+ =/ derived=(unit ifile:jibb)
56+ (api-poke-interface:jibb /ui/api/demo/jibb p.poke proj-mark values.u.prepared molds.u.prepared `iface.u.prepared)
57+ ?^ derived ~["an API-derived proj poke name was accepted"]
58+ proj-graph-errors
59+++ proj-graph-errors
60+ ^- (list tape)
61+ =/ child=@t '++ owned ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a++ exported owned\0a'
62+ =/ parent=@t '/= dep /ui/dep\0a++ answer exported.dep\0a'
63+ =/ bundle=jbundle:jibb ~[[/ui/dep/jibb child]]
64+ =/ built=jfile-result:jibb (infer-jibb-file:jibb /ui/root/jibb parent ~ ~ bundle ~[/ui/root/jibb] ~ ~ ~ ~)
65+ ?: ?=(%| -.built) ~["imported projection module did not infer"]
66+ =/ dep=(unit ifile:jibb) (find-jibb-cache:jibb /ui/dep/jibb cache.p.built)
67+ ?~ dep ~["imported module cache is missing"]
68+ =/ owned=(list iwidth-definition:jibb) (skim elaborations.u.dep |=(d=iwidth-definition:jibb =(%owned name.d)))
69+ ?~ owned ~["imported module projection evidence is missing"]
70+ =/ private=@t '/= core /lib/jibb/primitives\0a++ pick |= x=[a=@t b=@p] a.x\0a++ project (pick (proj [a="hi" b=~zod c=%.y]))\0a'
71+ =/ public=@t '/= internal /lib/jibb/internal\0a++ exposed project.internal\0a++ local ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a'
72+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
73+ ?~ prep ~["source prelude did not prepare"]
74+ =/ local=(list iwidth-definition:jibb) (skim elaborations.iface.u.prep |=(d=iwidth-definition:jibb =(%local name.d)))
75+ ?~ local ~["public prelude projection evidence is missing"]
76+ =/ deps=(list iwidth-dependency:jibb) dependencies.iface.u.prep
77+ =/ private-deps=(list iwidth-dependency:jibb) (skim deps |=(d=iwidth-dependency:jibb =(at.d /lib/jibb/internal/jibb)))
78+ ?~ private-deps ~["private prelude dependency is missing"]
79+ =/ private-defs=(list iwidth-definition:jibb) (skim definitions.i.private-deps |=(d=iwidth-definition:jibb =(%project name.d)))
80+ ?~ private-defs ~["private dependency projection evidence is missing"]
81+ ~
82+++ test-proj-guards
83+ ^- tang
84+ (turn proj-guard-errors |=(reason=tape leaf+reason))
85+--
tests/lib/jibb.hoon+533−433
@@ -1886,359 +1886,427 @@
18861886/* tok-528 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
18871887/* tre-528 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
18881888/* typ-528 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1889−/* src-529 %jibb /tests/golden/types-qath-faces/source/jibb
1890−/* tok-529 %txt /tests/golden/types-qath-faces/tokens/txt
1891−/* tre-529 %txt /tests/golden/types-qath-faces/tree/txt
1892−/* typ-529 %txt /tests/golden/types-qath-faces/types/txt
1893−/* src-530 %jibb /tests/golden/types-qath-holes/source/jibb
1894−/* tok-530 %txt /tests/golden/types-qath-holes/tokens/txt
1895−/* tre-530 %txt /tests/golden/types-qath-holes/tree/txt
1896−/* typ-530 %txt /tests/golden/types-qath-holes/types/txt
1897−/* src-531 %jibb /tests/golden/types-qath-module-identity/source/jibb
1898−/* tok-531 %txt /tests/golden/types-qath-module-identity/tokens/txt
1899−/* tre-531 %txt /tests/golden/types-qath-module-identity/tree/txt
1900−/* mod-531-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
1901−/* mod-531-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
1902−/* mod-531-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
1903−/* typ-531 %txt /tests/golden/types-qath-module-identity/types/txt
1904−/* mtre-531 %txt /tests/golden/types-qath-module-identity/module-trees/txt
1905−/* src-532 %jibb /tests/golden/types-qath-recursive/source/jibb
1906−/* tok-532 %txt /tests/golden/types-qath-recursive/tokens/txt
1907−/* tre-532 %txt /tests/golden/types-qath-recursive/tree/txt
1908−/* typ-532 %txt /tests/golden/types-qath-recursive/types/txt
1909−/* src-533 %jibb /tests/golden/types-record-bound-variable/source/jibb
1910−/* tok-533 %txt /tests/golden/types-record-bound-variable/tokens/txt
1911−/* tre-533 %txt /tests/golden/types-record-bound-variable/tree/txt
1912−/* typ-533 %txt /tests/golden/types-record-bound-variable/types/txt
1913−/* src-534 %jibb /tests/golden/types-record-cast-context/source/jibb
1914−/* tok-534 %txt /tests/golden/types-record-cast-context/tokens/txt
1915−/* tre-534 %txt /tests/golden/types-record-cast-context/tree/txt
1916−/* typ-534 %txt /tests/golden/types-record-cast-context/types/txt
1917−/* src-535 %jibb /tests/golden/types-record-change/source/jibb
1918−/* tok-535 %txt /tests/golden/types-record-change/tokens/txt
1919−/* tre-535 %txt /tests/golden/types-record-change/tree/txt
1920−/* typ-535 %txt /tests/golden/types-record-change/types/txt
1921−/* src-536 %jibb /tests/golden/types-record-change-generic/source/jibb
1922−/* tok-536 %txt /tests/golden/types-record-change-generic/tokens/txt
1923−/* tre-536 %txt /tests/golden/types-record-change-generic/tree/txt
1924−/* typ-536 %txt /tests/golden/types-record-change-generic/types/txt
1925−/* src-537 %jibb /tests/golden/types-record-faces/source/jibb
1926−/* tok-537 %txt /tests/golden/types-record-faces/tokens/txt
1927−/* tre-537 %txt /tests/golden/types-record-faces/tree/txt
1928−/* typ-537 %txt /tests/golden/types-record-faces/types/txt
1929−/* src-538 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
1930−/* tok-538 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
1931−/* tre-538 %txt /tests/golden/types-record-field-edit-separate/tree/txt
1932−/* typ-538 %txt /tests/golden/types-record-field-edit-separate/types/txt
1933−/* src-539 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
1934−/* tok-539 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
1935−/* tre-539 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
1936−/* typ-539 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
1937−/* src-540 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
1938−/* tok-540 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
1939−/* tre-540 %txt /tests/golden/types-record-field-expr-separate/tree/txt
1940−/* typ-540 %txt /tests/golden/types-record-field-expr-separate/types/txt
1941−/* src-541 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
1942−/* tok-541 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
1943−/* tre-541 %txt /tests/golden/types-record-field-module-reachable/tree/txt
1944−/* mod-541-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
1945−/* typ-541 %txt /tests/golden/types-record-field-module-reachable/types/txt
1946−/* mtre-541 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
1947−/* src-542 %jibb /tests/golden/types-record-field-module-unused/source/jibb
1948−/* tok-542 %txt /tests/golden/types-record-field-module-unused/tokens/txt
1949−/* tre-542 %txt /tests/golden/types-record-field-module-unused/tree/txt
1950−/* mod-542-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
1951−/* mod-542-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
1952−/* typ-542 %txt /tests/golden/types-record-field-module-unused/types/txt
1953−/* mtre-542 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
1954−/* src-543 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
1955−/* tok-543 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
1956−/* tre-543 %txt /tests/golden/types-record-field-nested-mold/tree/txt
1957−/* typ-543 %txt /tests/golden/types-record-field-nested-mold/types/txt
1958−/* src-544 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
1959−/* tok-544 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
1960−/* tre-544 %txt /tests/golden/types-record-field-outer-inner/tree/txt
1961−/* typ-544 %txt /tests/golden/types-record-field-outer-inner/types/txt
1962−/* src-545 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
1963−/* tok-545 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
1964−/* tre-545 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
1965−/* typ-545 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
1966−/* src-546 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
1967−/* tok-546 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
1968−/* tre-546 %txt /tests/golden/types-record-field-separate-molds/tree/txt
1969−/* typ-546 %txt /tests/golden/types-record-field-separate-molds/types/txt
1970−/* src-547 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
1971−/* tok-547 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
1972−/* tre-547 %txt /tests/golden/types-record-field-unused-mold/tree/txt
1973−/* typ-547 %txt /tests/golden/types-record-field-unused-mold/types/txt
1974−/* src-548 %jibb /tests/golden/types-record-import/source/jibb
1975−/* tok-548 %txt /tests/golden/types-record-import/tokens/txt
1976−/* tre-548 %txt /tests/golden/types-record-import/tree/txt
1977−/* mod-548-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1978−/* typ-548 %txt /tests/golden/types-record-import/types/txt
1979−/* mtre-548 %txt /tests/golden/types-record-import/module-trees/txt
1980−/* src-549 %jibb /tests/golden/types-record-local-scheme/source/jibb
1981−/* tok-549 %txt /tests/golden/types-record-local-scheme/tokens/txt
1982−/* tre-549 %txt /tests/golden/types-record-local-scheme/tree/txt
1983−/* typ-549 %txt /tests/golden/types-record-local-scheme/types/txt
1984−/* src-550 %jibb /tests/golden/types-record-nested/source/jibb
1985−/* tok-550 %txt /tests/golden/types-record-nested/tokens/txt
1986−/* tre-550 %txt /tests/golden/types-record-nested/tree/txt
1987−/* typ-550 %txt /tests/golden/types-record-nested/types/txt
1988−/* src-551 %jibb /tests/golden/types-record-to-tuple/source/jibb
1989−/* tok-551 %txt /tests/golden/types-record-to-tuple/tokens/txt
1990−/* tre-551 %txt /tests/golden/types-record-to-tuple/tree/txt
1991−/* typ-551 %txt /tests/golden/types-record-to-tuple/types/txt
1992−/* src-552 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1993−/* tok-552 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1994−/* tre-552 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1995−/* typ-552 %txt /tests/golden/types-recursion-scc-failures/types/txt
1996−/* src-553 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1997−/* tok-553 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1998−/* tre-553 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1999−/* typ-553 %txt /tests/golden/types-recursion-scc-groups/types/txt
2000−/* src-554 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2001−/* tok-554 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2002−/* tre-554 %txt /tests/golden/types-recursion-scc-import/tree/txt
2003−/* mod-554-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2004−/* typ-554 %txt /tests/golden/types-recursion-scc-import/types/txt
2005−/* mtre-554 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2006−/* src-555 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2007−/* tok-555 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2008−/* tre-555 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2009−/* mod-555-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2010−/* typ-555 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2011−/* mtre-555 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2012−/* src-556 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2013−/* tok-556 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2014−/* tre-556 %txt /tests/golden/types-recursion-scc-local/tree/txt
2015−/* typ-556 %txt /tests/golden/types-recursion-scc-local/types/txt
2016−/* src-557 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2017−/* tok-557 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2018−/* tre-557 %txt /tests/golden/types-recursion-scc-order/tree/txt
2019−/* typ-557 %txt /tests/golden/types-recursion-scc-order/types/txt
2020−/* src-558 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2021−/* tok-558 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2022−/* tre-558 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2023−/* typ-558 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2024−/* src-559 %jibb /tests/golden/types-recursive-branch/source/jibb
2025−/* tok-559 %txt /tests/golden/types-recursive-branch/tokens/txt
2026−/* tre-559 %txt /tests/golden/types-recursive-branch/tree/txt
2027−/* typ-559 %txt /tests/golden/types-recursive-branch/types/txt
2028−/* src-560 %jibb /tests/golden/types-recursive-gate/source/jibb
2029−/* tok-560 %txt /tests/golden/types-recursive-gate/tokens/txt
2030−/* tre-560 %txt /tests/golden/types-recursive-gate/tree/txt
2031−/* typ-560 %txt /tests/golden/types-recursive-gate/types/txt
2032−/* src-561 %jibb /tests/golden/types-recursive-sample/source/jibb
2033−/* tok-561 %txt /tests/golden/types-recursive-sample/tokens/txt
2034−/* tre-561 %txt /tests/golden/types-recursive-sample/tree/txt
2035−/* typ-561 %txt /tests/golden/types-recursive-sample/types/txt
2036−/* src-562 %jibb /tests/golden/types-scope-library-poke/source/jibb
2037−/* tok-562 %txt /tests/golden/types-scope-library-poke/tokens/txt
2038−/* tre-562 %txt /tests/golden/types-scope-library-poke/tree/txt
2039−/* typ-562 %txt /tests/golden/types-scope-library-poke/types/txt
2040−/* src-563 %jibb /tests/golden/types-scope-root-api/source/jibb
2041−/* tok-563 %txt /tests/golden/types-scope-root-api/tokens/txt
2042−/* tre-563 %txt /tests/golden/types-scope-root-api/tree/txt
2043−/* typ-563 %txt /tests/golden/types-scope-root-api/types/txt
2044−/* src-564 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2045−/* tok-564 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2046−/* tre-564 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2047−/* typ-564 %txt /tests/golden/types-scope-store-duplicate/types/txt
2048−/* src-565 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2049−/* tok-565 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2050−/* tre-565 %txt /tests/golden/types-scope-store-shadow/tree/txt
2051−/* typ-565 %txt /tests/golden/types-scope-store-shadow/types/txt
2052−/* src-566 %jibb /tests/golden/types-single-case-pattern/source/jibb
2053−/* tok-566 %txt /tests/golden/types-single-case-pattern/tokens/txt
2054−/* tre-566 %txt /tests/golden/types-single-case-pattern/tree/txt
2055−/* typ-566 %txt /tests/golden/types-single-case-pattern/types/txt
2056−/* src-567 %jibb /tests/golden/types-string-interpolation/source/jibb
2057−/* tok-567 %txt /tests/golden/types-string-interpolation/tokens/txt
2058−/* tre-567 %txt /tests/golden/types-string-interpolation/tree/txt
2059−/* typ-567 %txt /tests/golden/types-string-interpolation/types/txt
2060−/* src-568 %jibb /tests/golden/types-tuple-context/source/jibb
2061−/* tok-568 %txt /tests/golden/types-tuple-context/tokens/txt
2062−/* tre-568 %txt /tests/golden/types-tuple-context/tree/txt
2063−/* typ-568 %txt /tests/golden/types-tuple-context/types/txt
2064−/* src-569 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2065−/* tok-569 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2066−/* tre-569 %txt /tests/golden/types-tuple-context-nested/tree/txt
2067−/* typ-569 %txt /tests/golden/types-tuple-context-nested/types/txt
2068−/* src-570 %jibb /tests/golden/types-union-alias/source/jibb
2069−/* tok-570 %txt /tests/golden/types-union-alias/tokens/txt
2070−/* tre-570 %txt /tests/golden/types-union-alias/tree/txt
2071−/* typ-570 %txt /tests/golden/types-union-alias/types/txt
2072−/* src-571 %jibb /tests/golden/types-union-branch-context/source/jibb
2073−/* tok-571 %txt /tests/golden/types-union-branch-context/tokens/txt
2074−/* tre-571 %txt /tests/golden/types-union-branch-context/tree/txt
2075−/* typ-571 %txt /tests/golden/types-union-branch-context/types/txt
2076−/* src-572 %jibb /tests/golden/types-union-branch-pending/source/jibb
2077−/* tok-572 %txt /tests/golden/types-union-branch-pending/tokens/txt
2078−/* tre-572 %txt /tests/golden/types-union-branch-pending/tree/txt
2079−/* typ-572 %txt /tests/golden/types-union-branch-pending/types/txt
2080−/* src-573 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2081−/* tok-573 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2082−/* tre-573 %txt /tests/golden/types-union-constructor-shape/tree/txt
2083−/* typ-573 %txt /tests/golden/types-union-constructor-shape/types/txt
2084−/* src-574 %jibb /tests/golden/types-union-context-flow/source/jibb
2085−/* tok-574 %txt /tests/golden/types-union-context-flow/tokens/txt
2086−/* tre-574 %txt /tests/golden/types-union-context-flow/tree/txt
2087−/* typ-574 %txt /tests/golden/types-union-context-flow/types/txt
2088−/* src-575 %jibb /tests/golden/types-union-finite/source/jibb
2089−/* tok-575 %txt /tests/golden/types-union-finite/tokens/txt
2090−/* tre-575 %txt /tests/golden/types-union-finite/tree/txt
2091−/* typ-575 %txt /tests/golden/types-union-finite/types/txt
2092−/* src-576 %jibb /tests/golden/types-union-finite-context/source/jibb
2093−/* tok-576 %txt /tests/golden/types-union-finite-context/tokens/txt
2094−/* tre-576 %txt /tests/golden/types-union-finite-context/tree/txt
2095−/* typ-576 %txt /tests/golden/types-union-finite-context/types/txt
2096−/* src-577 %jibb /tests/golden/types-union-finite-generic/source/jibb
2097−/* tok-577 %txt /tests/golden/types-union-finite-generic/tokens/txt
2098−/* tre-577 %txt /tests/golden/types-union-finite-generic/tree/txt
2099−/* typ-577 %txt /tests/golden/types-union-finite-generic/types/txt
2100−/* src-578 %jibb /tests/golden/types-union-finite-limit/source/jibb
2101−/* tok-578 %txt /tests/golden/types-union-finite-limit/tokens/txt
2102−/* tre-578 %txt /tests/golden/types-union-finite-limit/tree/txt
2103−/* typ-578 %txt /tests/golden/types-union-finite-limit/types/txt
2104−/* src-579 %jibb /tests/golden/types-union-import/source/jibb
2105−/* tok-579 %txt /tests/golden/types-union-import/tokens/txt
2106−/* tre-579 %txt /tests/golden/types-union-import/tree/txt
2107−/* mod-579-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2108−/* typ-579 %txt /tests/golden/types-union-import/types/txt
2109−/* mtre-579 %txt /tests/golden/types-union-import/module-trees/txt
2110−/* src-580 %jibb /tests/golden/types-union-local-pending/source/jibb
2111−/* tok-580 %txt /tests/golden/types-union-local-pending/tokens/txt
2112−/* tre-580 %txt /tests/golden/types-union-local-pending/tree/txt
2113−/* typ-580 %txt /tests/golden/types-union-local-pending/types/txt
2114−/* src-581 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2115−/* tok-581 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2116−/* tre-581 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2117−/* typ-581 %txt /tests/golden/types-union-nonwing-subject/types/txt
2118−/* src-582 %jibb /tests/golden/types-union-overlap/source/jibb
2119−/* tok-582 %txt /tests/golden/types-union-overlap/tokens/txt
2120−/* tre-582 %txt /tests/golden/types-union-overlap/tree/txt
2121−/* typ-582 %txt /tests/golden/types-union-overlap/types/txt
2122−/* src-583 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2123−/* tok-583 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2124−/* tre-583 %txt /tests/golden/types-union-overlap-nested/tree/txt
2125−/* typ-583 %txt /tests/golden/types-union-overlap-nested/types/txt
2126−/* src-584 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2127−/* tok-584 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2128−/* tre-584 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2129−/* typ-584 %txt /tests/golden/types-union-pattern-result-context/types/txt
2130−/* src-585 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2131−/* tok-585 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2132−/* tre-585 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2133−/* typ-585 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2134−/* src-586 %jibb /tests/golden/types-union-patterns/source/jibb
2135−/* tok-586 %txt /tests/golden/types-union-patterns/tokens/txt
2136−/* tre-586 %txt /tests/golden/types-union-patterns/tree/txt
2137−/* typ-586 %txt /tests/golden/types-union-patterns/types/txt
2138−/* src-587 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2139−/* tok-587 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2140−/* tre-587 %txt /tests/golden/types-union-patterns-generic/tree/txt
2141−/* typ-587 %txt /tests/golden/types-union-patterns-generic/types/txt
2142−/* src-588 %jibb /tests/golden/types-union-patterns-import/source/jibb
2143−/* tok-588 %txt /tests/golden/types-union-patterns-import/tokens/txt
2144−/* tre-588 %txt /tests/golden/types-union-patterns-import/tree/txt
2145−/* mod-588-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2146−/* typ-588 %txt /tests/golden/types-union-patterns-import/types/txt
2147−/* mtre-588 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2148−/* src-589 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2149−/* tok-589 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2150−/* tre-589 %txt /tests/golden/types-union-phantom-generic/tree/txt
2151−/* typ-589 %txt /tests/golden/types-union-phantom-generic/types/txt
2152−/* src-590 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2153−/* tok-590 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2154−/* tre-590 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2155−/* mod-590-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2156−/* mod-590-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2157−/* typ-590 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2158−/* mtre-590 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2159−/* src-591 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2160−/* tok-591 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2161−/* tre-591 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2162−/* mod-591-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2163−/* typ-591 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2164−/* mtre-591 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2165−/* src-592 %jibb /tests/golden/types-union-print-distinct/source/jibb
2166−/* tok-592 %txt /tests/golden/types-union-print-distinct/tokens/txt
2167−/* tre-592 %txt /tests/golden/types-union-print-distinct/tree/txt
2168−/* mod-592-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2169−/* mod-592-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2170−/* mod-592-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2171−/* typ-592 %txt /tests/golden/types-union-print-distinct/types/txt
2172−/* mtre-592 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2173−/* src-593 %jibb /tests/golden/types-union-print-escape/source/jibb
2174−/* tok-593 %txt /tests/golden/types-union-print-escape/tokens/txt
2175−/* tre-593 %txt /tests/golden/types-union-print-escape/tree/txt
2176−/* typ-593 %txt /tests/golden/types-union-print-escape/types/txt
2177−/* src-594 %jibb /tests/golden/types-union-print-local/source/jibb
2178−/* tok-594 %txt /tests/golden/types-union-print-local/tokens/txt
2179−/* tre-594 %txt /tests/golden/types-union-print-local/tree/txt
2180−/* typ-594 %txt /tests/golden/types-union-print-local/types/txt
2181−/* src-595 %jibb /tests/golden/types-union-print-nested/source/jibb
2182−/* tok-595 %txt /tests/golden/types-union-print-nested/tokens/txt
2183−/* tre-595 %txt /tests/golden/types-union-print-nested/tree/txt
2184−/* typ-595 %txt /tests/golden/types-union-print-nested/types/txt
2185−/* src-596 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2186−/* tok-596 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2187−/* tre-596 %txt /tests/golden/types-union-print-same-origin/tree/txt
2188−/* mod-596-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2189−/* typ-596 %txt /tests/golden/types-union-print-same-origin/types/txt
2190−/* mtre-596 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2191−/* src-597 %jibb /tests/golden/types-union-print-transitive/source/jibb
2192−/* tok-597 %txt /tests/golden/types-union-print-transitive/tokens/txt
2193−/* tre-597 %txt /tests/golden/types-union-print-transitive/tree/txt
2194−/* mod-597-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2195−/* mod-597-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2196−/* typ-597 %txt /tests/golden/types-union-print-transitive/types/txt
2197−/* mtre-597 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2198−/* src-598 %jibb /tests/golden/types-union-singleton/source/jibb
2199−/* tok-598 %txt /tests/golden/types-union-singleton/tokens/txt
2200−/* tre-598 %txt /tests/golden/types-union-singleton/tree/txt
2201−/* typ-598 %txt /tests/golden/types-union-singleton/types/txt
2202−/* src-599 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2203−/* tok-599 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2204−/* tre-599 %txt /tests/golden/types-union-tag-atoms/tree/txt
2205−/* typ-599 %txt /tests/golden/types-union-tag-atoms/types/txt
2206−/* src-600 %jibb /tests/golden/types-union-tags/source/jibb
2207−/* tok-600 %txt /tests/golden/types-union-tags/tokens/txt
2208−/* tre-600 %txt /tests/golden/types-union-tags/tree/txt
2209−/* typ-600 %txt /tests/golden/types-union-tags/types/txt
2210−/* src-601 %jibb /tests/golden/types-union-unresolved/source/jibb
2211−/* tok-601 %txt /tests/golden/types-union-unresolved/tokens/txt
2212−/* tre-601 %txt /tests/golden/types-union-unresolved/tree/txt
2213−/* typ-601 %txt /tests/golden/types-union-unresolved/types/txt
2214−/* src-602 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2215−/* tok-602 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2216−/* tre-602 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2217−/* typ-602 %txt /tests/golden/types-union-unresolved-flow/types/txt
2218−/* src-603 %jibb /tests/golden/types-unit-construction/source/jibb
2219−/* tok-603 %txt /tests/golden/types-unit-construction/tokens/txt
2220−/* tre-603 %txt /tests/golden/types-unit-construction/tree/txt
2221−/* typ-603 %txt /tests/golden/types-unit-construction/types/txt
2222−/* src-604 %jibb /tests/golden/types-unit-context/source/jibb
2223−/* tok-604 %txt /tests/golden/types-unit-context/tokens/txt
2224−/* tre-604 %txt /tests/golden/types-unit-context/tree/txt
2225−/* typ-604 %txt /tests/golden/types-unit-context/types/txt
2226−/* src-605 %jibb /tests/golden/types-unit-patterns/source/jibb
2227−/* tok-605 %txt /tests/golden/types-unit-patterns/tokens/txt
2228−/* tre-605 %txt /tests/golden/types-unit-patterns/tree/txt
2229−/* typ-605 %txt /tests/golden/types-unit-patterns/types/txt
2230−/* src-606 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2231−/* tok-606 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2232−/* tre-606 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2233−/* typ-606 %txt /tests/golden/types-value-cycle-shadow/types/txt
2234−/* src-607 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2235−/* tok-607 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2236−/* tre-607 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2237−/* typ-607 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2238−/* src-608 %jibb /tests/golden/types-value-cycles/source/jibb
2239−/* tok-608 %txt /tests/golden/types-value-cycles/tokens/txt
2240−/* tre-608 %txt /tests/golden/types-value-cycles/tree/txt
2241−/* typ-608 %txt /tests/golden/types-value-cycles/types/txt
1889+/* src-529 %jibb /tests/golden/types-proj-explicit-context/source/jibb
1890+/* tok-529 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1891+/* tre-529 %txt /tests/golden/types-proj-explicit-context/tree/txt
1892+/* typ-529 %txt /tests/golden/types-proj-explicit-context/types/txt
1893+/* src-530 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1894+/* tok-530 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1895+/* tre-530 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1896+/* typ-530 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1897+/* src-531 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1898+/* tok-531 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1899+/* tre-531 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
1900+/* mod-531-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
1901+/* typ-531 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
1902+/* mtre-531 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
1903+/* src-532 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
1904+/* tok-532 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
1905+/* tre-532 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
1906+/* mod-532-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
1907+/* typ-532 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
1908+/* mtre-532 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
1909+/* src-533 %jibb /tests/golden/types-proj-reserved-local/source/jibb
1910+/* tok-533 %txt /tests/golden/types-proj-reserved-local/tokens/txt
1911+/* tre-533 %txt /tests/golden/types-proj-reserved-local/tree/txt
1912+/* typ-533 %txt /tests/golden/types-proj-reserved-local/types/txt
1913+/* src-534 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
1914+/* tok-534 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
1915+/* tre-534 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
1916+/* typ-534 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
1917+/* src-535 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
1918+/* tok-535 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
1919+/* tre-535 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
1920+/* typ-535 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
1921+/* src-536 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
1922+/* tok-536 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
1923+/* tre-536 %txt /tests/golden/types-proj-reserved-mold/tree/txt
1924+/* typ-536 %txt /tests/golden/types-proj-reserved-mold/types/txt
1925+/* src-537 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
1926+/* tok-537 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
1927+/* tre-537 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
1928+/* typ-537 %txt /tests/golden/types-proj-reserved-pattern/types/txt
1929+/* src-538 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
1930+/* tok-538 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
1931+/* tre-538 %txt /tests/golden/types-proj-reserved-positive/tree/txt
1932+/* typ-538 %txt /tests/golden/types-proj-reserved-positive/types/txt
1933+/* src-539 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
1934+/* tok-539 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
1935+/* tre-539 %txt /tests/golden/types-proj-reserved-sample/tree/txt
1936+/* typ-539 %txt /tests/golden/types-proj-reserved-sample/types/txt
1937+/* src-540 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
1938+/* tok-540 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
1939+/* tre-540 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
1940+/* typ-540 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
1941+/* src-541 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
1942+/* tok-541 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
1943+/* tre-541 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
1944+/* typ-541 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
1945+/* src-542 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
1946+/* tok-542 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
1947+/* tre-542 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
1948+/* typ-542 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
1949+/* src-543 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
1950+/* tok-543 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
1951+/* tre-543 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
1952+/* typ-543 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
1953+/* src-544 %jibb /tests/golden/types-proj-reserved-value/source/jibb
1954+/* tok-544 %txt /tests/golden/types-proj-reserved-value/tokens/txt
1955+/* tre-544 %txt /tests/golden/types-proj-reserved-value/tree/txt
1956+/* typ-544 %txt /tests/golden/types-proj-reserved-value/types/txt
1957+/* src-545 %jibb /tests/golden/types-qath-faces/source/jibb
1958+/* tok-545 %txt /tests/golden/types-qath-faces/tokens/txt
1959+/* tre-545 %txt /tests/golden/types-qath-faces/tree/txt
1960+/* typ-545 %txt /tests/golden/types-qath-faces/types/txt
1961+/* src-546 %jibb /tests/golden/types-qath-holes/source/jibb
1962+/* tok-546 %txt /tests/golden/types-qath-holes/tokens/txt
1963+/* tre-546 %txt /tests/golden/types-qath-holes/tree/txt
1964+/* typ-546 %txt /tests/golden/types-qath-holes/types/txt
1965+/* src-547 %jibb /tests/golden/types-qath-module-identity/source/jibb
1966+/* tok-547 %txt /tests/golden/types-qath-module-identity/tokens/txt
1967+/* tre-547 %txt /tests/golden/types-qath-module-identity/tree/txt
1968+/* mod-547-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
1969+/* mod-547-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
1970+/* mod-547-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
1971+/* typ-547 %txt /tests/golden/types-qath-module-identity/types/txt
1972+/* mtre-547 %txt /tests/golden/types-qath-module-identity/module-trees/txt
1973+/* src-548 %jibb /tests/golden/types-qath-recursive/source/jibb
1974+/* tok-548 %txt /tests/golden/types-qath-recursive/tokens/txt
1975+/* tre-548 %txt /tests/golden/types-qath-recursive/tree/txt
1976+/* typ-548 %txt /tests/golden/types-qath-recursive/types/txt
1977+/* src-549 %jibb /tests/golden/types-record-bound-variable/source/jibb
1978+/* tok-549 %txt /tests/golden/types-record-bound-variable/tokens/txt
1979+/* tre-549 %txt /tests/golden/types-record-bound-variable/tree/txt
1980+/* typ-549 %txt /tests/golden/types-record-bound-variable/types/txt
1981+/* src-550 %jibb /tests/golden/types-record-cast-context/source/jibb
1982+/* tok-550 %txt /tests/golden/types-record-cast-context/tokens/txt
1983+/* tre-550 %txt /tests/golden/types-record-cast-context/tree/txt
1984+/* typ-550 %txt /tests/golden/types-record-cast-context/types/txt
1985+/* src-551 %jibb /tests/golden/types-record-change/source/jibb
1986+/* tok-551 %txt /tests/golden/types-record-change/tokens/txt
1987+/* tre-551 %txt /tests/golden/types-record-change/tree/txt
1988+/* typ-551 %txt /tests/golden/types-record-change/types/txt
1989+/* src-552 %jibb /tests/golden/types-record-change-generic/source/jibb
1990+/* tok-552 %txt /tests/golden/types-record-change-generic/tokens/txt
1991+/* tre-552 %txt /tests/golden/types-record-change-generic/tree/txt
1992+/* typ-552 %txt /tests/golden/types-record-change-generic/types/txt
1993+/* src-553 %jibb /tests/golden/types-record-faces/source/jibb
1994+/* tok-553 %txt /tests/golden/types-record-faces/tokens/txt
1995+/* tre-553 %txt /tests/golden/types-record-faces/tree/txt
1996+/* typ-553 %txt /tests/golden/types-record-faces/types/txt
1997+/* src-554 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
1998+/* tok-554 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
1999+/* tre-554 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2000+/* typ-554 %txt /tests/golden/types-record-field-edit-separate/types/txt
2001+/* src-555 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2002+/* tok-555 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2003+/* tre-555 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2004+/* typ-555 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2005+/* src-556 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2006+/* tok-556 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2007+/* tre-556 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2008+/* typ-556 %txt /tests/golden/types-record-field-expr-separate/types/txt
2009+/* src-557 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2010+/* tok-557 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2011+/* tre-557 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2012+/* mod-557-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2013+/* typ-557 %txt /tests/golden/types-record-field-module-reachable/types/txt
2014+/* mtre-557 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2015+/* src-558 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2016+/* tok-558 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2017+/* tre-558 %txt /tests/golden/types-record-field-module-unused/tree/txt
2018+/* mod-558-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2019+/* mod-558-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2020+/* typ-558 %txt /tests/golden/types-record-field-module-unused/types/txt
2021+/* mtre-558 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2022+/* src-559 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2023+/* tok-559 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2024+/* tre-559 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2025+/* typ-559 %txt /tests/golden/types-record-field-nested-mold/types/txt
2026+/* src-560 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2027+/* tok-560 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2028+/* tre-560 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2029+/* typ-560 %txt /tests/golden/types-record-field-outer-inner/types/txt
2030+/* src-561 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2031+/* tok-561 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2032+/* tre-561 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2033+/* typ-561 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2034+/* src-562 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2035+/* tok-562 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2036+/* tre-562 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2037+/* typ-562 %txt /tests/golden/types-record-field-separate-molds/types/txt
2038+/* src-563 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2039+/* tok-563 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2040+/* tre-563 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2041+/* typ-563 %txt /tests/golden/types-record-field-unused-mold/types/txt
2042+/* src-564 %jibb /tests/golden/types-record-import/source/jibb
2043+/* tok-564 %txt /tests/golden/types-record-import/tokens/txt
2044+/* tre-564 %txt /tests/golden/types-record-import/tree/txt
2045+/* mod-564-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2046+/* typ-564 %txt /tests/golden/types-record-import/types/txt
2047+/* mtre-564 %txt /tests/golden/types-record-import/module-trees/txt
2048+/* src-565 %jibb /tests/golden/types-record-local-scheme/source/jibb
2049+/* tok-565 %txt /tests/golden/types-record-local-scheme/tokens/txt
2050+/* tre-565 %txt /tests/golden/types-record-local-scheme/tree/txt
2051+/* typ-565 %txt /tests/golden/types-record-local-scheme/types/txt
2052+/* src-566 %jibb /tests/golden/types-record-nested/source/jibb
2053+/* tok-566 %txt /tests/golden/types-record-nested/tokens/txt
2054+/* tre-566 %txt /tests/golden/types-record-nested/tree/txt
2055+/* typ-566 %txt /tests/golden/types-record-nested/types/txt
2056+/* src-567 %jibb /tests/golden/types-record-to-tuple/source/jibb
2057+/* tok-567 %txt /tests/golden/types-record-to-tuple/tokens/txt
2058+/* tre-567 %txt /tests/golden/types-record-to-tuple/tree/txt
2059+/* typ-567 %txt /tests/golden/types-record-to-tuple/types/txt
2060+/* src-568 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2061+/* tok-568 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2062+/* tre-568 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2063+/* typ-568 %txt /tests/golden/types-recursion-scc-failures/types/txt
2064+/* src-569 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2065+/* tok-569 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2066+/* tre-569 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2067+/* typ-569 %txt /tests/golden/types-recursion-scc-groups/types/txt
2068+/* src-570 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2069+/* tok-570 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2070+/* tre-570 %txt /tests/golden/types-recursion-scc-import/tree/txt
2071+/* mod-570-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2072+/* typ-570 %txt /tests/golden/types-recursion-scc-import/types/txt
2073+/* mtre-570 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2074+/* src-571 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2075+/* tok-571 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2076+/* tre-571 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2077+/* mod-571-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2078+/* typ-571 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2079+/* mtre-571 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2080+/* src-572 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2081+/* tok-572 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2082+/* tre-572 %txt /tests/golden/types-recursion-scc-local/tree/txt
2083+/* typ-572 %txt /tests/golden/types-recursion-scc-local/types/txt
2084+/* src-573 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2085+/* tok-573 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2086+/* tre-573 %txt /tests/golden/types-recursion-scc-order/tree/txt
2087+/* typ-573 %txt /tests/golden/types-recursion-scc-order/types/txt
2088+/* src-574 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2089+/* tok-574 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2090+/* tre-574 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2091+/* typ-574 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2092+/* src-575 %jibb /tests/golden/types-recursive-branch/source/jibb
2093+/* tok-575 %txt /tests/golden/types-recursive-branch/tokens/txt
2094+/* tre-575 %txt /tests/golden/types-recursive-branch/tree/txt
2095+/* typ-575 %txt /tests/golden/types-recursive-branch/types/txt
2096+/* src-576 %jibb /tests/golden/types-recursive-gate/source/jibb
2097+/* tok-576 %txt /tests/golden/types-recursive-gate/tokens/txt
2098+/* tre-576 %txt /tests/golden/types-recursive-gate/tree/txt
2099+/* typ-576 %txt /tests/golden/types-recursive-gate/types/txt
2100+/* src-577 %jibb /tests/golden/types-recursive-sample/source/jibb
2101+/* tok-577 %txt /tests/golden/types-recursive-sample/tokens/txt
2102+/* tre-577 %txt /tests/golden/types-recursive-sample/tree/txt
2103+/* typ-577 %txt /tests/golden/types-recursive-sample/types/txt
2104+/* src-578 %jibb /tests/golden/types-scope-library-poke/source/jibb
2105+/* tok-578 %txt /tests/golden/types-scope-library-poke/tokens/txt
2106+/* tre-578 %txt /tests/golden/types-scope-library-poke/tree/txt
2107+/* typ-578 %txt /tests/golden/types-scope-library-poke/types/txt
2108+/* src-579 %jibb /tests/golden/types-scope-root-api/source/jibb
2109+/* tok-579 %txt /tests/golden/types-scope-root-api/tokens/txt
2110+/* tre-579 %txt /tests/golden/types-scope-root-api/tree/txt
2111+/* typ-579 %txt /tests/golden/types-scope-root-api/types/txt
2112+/* src-580 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2113+/* tok-580 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2114+/* tre-580 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2115+/* typ-580 %txt /tests/golden/types-scope-store-duplicate/types/txt
2116+/* src-581 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2117+/* tok-581 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2118+/* tre-581 %txt /tests/golden/types-scope-store-shadow/tree/txt
2119+/* typ-581 %txt /tests/golden/types-scope-store-shadow/types/txt
2120+/* src-582 %jibb /tests/golden/types-single-case-pattern/source/jibb
2121+/* tok-582 %txt /tests/golden/types-single-case-pattern/tokens/txt
2122+/* tre-582 %txt /tests/golden/types-single-case-pattern/tree/txt
2123+/* typ-582 %txt /tests/golden/types-single-case-pattern/types/txt
2124+/* src-583 %jibb /tests/golden/types-string-interpolation/source/jibb
2125+/* tok-583 %txt /tests/golden/types-string-interpolation/tokens/txt
2126+/* tre-583 %txt /tests/golden/types-string-interpolation/tree/txt
2127+/* typ-583 %txt /tests/golden/types-string-interpolation/types/txt
2128+/* src-584 %jibb /tests/golden/types-tuple-context/source/jibb
2129+/* tok-584 %txt /tests/golden/types-tuple-context/tokens/txt
2130+/* tre-584 %txt /tests/golden/types-tuple-context/tree/txt
2131+/* typ-584 %txt /tests/golden/types-tuple-context/types/txt
2132+/* src-585 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2133+/* tok-585 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2134+/* tre-585 %txt /tests/golden/types-tuple-context-nested/tree/txt
2135+/* typ-585 %txt /tests/golden/types-tuple-context-nested/types/txt
2136+/* src-586 %jibb /tests/golden/types-union-alias/source/jibb
2137+/* tok-586 %txt /tests/golden/types-union-alias/tokens/txt
2138+/* tre-586 %txt /tests/golden/types-union-alias/tree/txt
2139+/* typ-586 %txt /tests/golden/types-union-alias/types/txt
2140+/* src-587 %jibb /tests/golden/types-union-branch-context/source/jibb
2141+/* tok-587 %txt /tests/golden/types-union-branch-context/tokens/txt
2142+/* tre-587 %txt /tests/golden/types-union-branch-context/tree/txt
2143+/* typ-587 %txt /tests/golden/types-union-branch-context/types/txt
2144+/* src-588 %jibb /tests/golden/types-union-branch-pending/source/jibb
2145+/* tok-588 %txt /tests/golden/types-union-branch-pending/tokens/txt
2146+/* tre-588 %txt /tests/golden/types-union-branch-pending/tree/txt
2147+/* typ-588 %txt /tests/golden/types-union-branch-pending/types/txt
2148+/* src-589 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2149+/* tok-589 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2150+/* tre-589 %txt /tests/golden/types-union-constructor-shape/tree/txt
2151+/* typ-589 %txt /tests/golden/types-union-constructor-shape/types/txt
2152+/* src-590 %jibb /tests/golden/types-union-context-flow/source/jibb
2153+/* tok-590 %txt /tests/golden/types-union-context-flow/tokens/txt
2154+/* tre-590 %txt /tests/golden/types-union-context-flow/tree/txt
2155+/* typ-590 %txt /tests/golden/types-union-context-flow/types/txt
2156+/* src-591 %jibb /tests/golden/types-union-finite/source/jibb
2157+/* tok-591 %txt /tests/golden/types-union-finite/tokens/txt
2158+/* tre-591 %txt /tests/golden/types-union-finite/tree/txt
2159+/* typ-591 %txt /tests/golden/types-union-finite/types/txt
2160+/* src-592 %jibb /tests/golden/types-union-finite-context/source/jibb
2161+/* tok-592 %txt /tests/golden/types-union-finite-context/tokens/txt
2162+/* tre-592 %txt /tests/golden/types-union-finite-context/tree/txt
2163+/* typ-592 %txt /tests/golden/types-union-finite-context/types/txt
2164+/* src-593 %jibb /tests/golden/types-union-finite-generic/source/jibb
2165+/* tok-593 %txt /tests/golden/types-union-finite-generic/tokens/txt
2166+/* tre-593 %txt /tests/golden/types-union-finite-generic/tree/txt
2167+/* typ-593 %txt /tests/golden/types-union-finite-generic/types/txt
2168+/* src-594 %jibb /tests/golden/types-union-finite-limit/source/jibb
2169+/* tok-594 %txt /tests/golden/types-union-finite-limit/tokens/txt
2170+/* tre-594 %txt /tests/golden/types-union-finite-limit/tree/txt
2171+/* typ-594 %txt /tests/golden/types-union-finite-limit/types/txt
2172+/* src-595 %jibb /tests/golden/types-union-import/source/jibb
2173+/* tok-595 %txt /tests/golden/types-union-import/tokens/txt
2174+/* tre-595 %txt /tests/golden/types-union-import/tree/txt
2175+/* mod-595-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2176+/* typ-595 %txt /tests/golden/types-union-import/types/txt
2177+/* mtre-595 %txt /tests/golden/types-union-import/module-trees/txt
2178+/* src-596 %jibb /tests/golden/types-union-local-pending/source/jibb
2179+/* tok-596 %txt /tests/golden/types-union-local-pending/tokens/txt
2180+/* tre-596 %txt /tests/golden/types-union-local-pending/tree/txt
2181+/* typ-596 %txt /tests/golden/types-union-local-pending/types/txt
2182+/* src-597 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2183+/* tok-597 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2184+/* tre-597 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2185+/* typ-597 %txt /tests/golden/types-union-nonwing-subject/types/txt
2186+/* src-598 %jibb /tests/golden/types-union-overlap/source/jibb
2187+/* tok-598 %txt /tests/golden/types-union-overlap/tokens/txt
2188+/* tre-598 %txt /tests/golden/types-union-overlap/tree/txt
2189+/* typ-598 %txt /tests/golden/types-union-overlap/types/txt
2190+/* src-599 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2191+/* tok-599 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2192+/* tre-599 %txt /tests/golden/types-union-overlap-nested/tree/txt
2193+/* typ-599 %txt /tests/golden/types-union-overlap-nested/types/txt
2194+/* src-600 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2195+/* tok-600 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2196+/* tre-600 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2197+/* typ-600 %txt /tests/golden/types-union-pattern-result-context/types/txt
2198+/* src-601 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2199+/* tok-601 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2200+/* tre-601 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2201+/* typ-601 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2202+/* src-602 %jibb /tests/golden/types-union-patterns/source/jibb
2203+/* tok-602 %txt /tests/golden/types-union-patterns/tokens/txt
2204+/* tre-602 %txt /tests/golden/types-union-patterns/tree/txt
2205+/* typ-602 %txt /tests/golden/types-union-patterns/types/txt
2206+/* src-603 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2207+/* tok-603 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2208+/* tre-603 %txt /tests/golden/types-union-patterns-generic/tree/txt
2209+/* typ-603 %txt /tests/golden/types-union-patterns-generic/types/txt
2210+/* src-604 %jibb /tests/golden/types-union-patterns-import/source/jibb
2211+/* tok-604 %txt /tests/golden/types-union-patterns-import/tokens/txt
2212+/* tre-604 %txt /tests/golden/types-union-patterns-import/tree/txt
2213+/* mod-604-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2214+/* typ-604 %txt /tests/golden/types-union-patterns-import/types/txt
2215+/* mtre-604 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2216+/* src-605 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2217+/* tok-605 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2218+/* tre-605 %txt /tests/golden/types-union-phantom-generic/tree/txt
2219+/* typ-605 %txt /tests/golden/types-union-phantom-generic/types/txt
2220+/* src-606 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2221+/* tok-606 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2222+/* tre-606 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2223+/* mod-606-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2224+/* mod-606-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2225+/* typ-606 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2226+/* mtre-606 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2227+/* src-607 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2228+/* tok-607 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2229+/* tre-607 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2230+/* mod-607-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2231+/* typ-607 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2232+/* mtre-607 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2233+/* src-608 %jibb /tests/golden/types-union-print-distinct/source/jibb
2234+/* tok-608 %txt /tests/golden/types-union-print-distinct/tokens/txt
2235+/* tre-608 %txt /tests/golden/types-union-print-distinct/tree/txt
2236+/* mod-608-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2237+/* mod-608-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2238+/* mod-608-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2239+/* typ-608 %txt /tests/golden/types-union-print-distinct/types/txt
2240+/* mtre-608 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2241+/* src-609 %jibb /tests/golden/types-union-print-escape/source/jibb
2242+/* tok-609 %txt /tests/golden/types-union-print-escape/tokens/txt
2243+/* tre-609 %txt /tests/golden/types-union-print-escape/tree/txt
2244+/* typ-609 %txt /tests/golden/types-union-print-escape/types/txt
2245+/* src-610 %jibb /tests/golden/types-union-print-local/source/jibb
2246+/* tok-610 %txt /tests/golden/types-union-print-local/tokens/txt
2247+/* tre-610 %txt /tests/golden/types-union-print-local/tree/txt
2248+/* typ-610 %txt /tests/golden/types-union-print-local/types/txt
2249+/* src-611 %jibb /tests/golden/types-union-print-nested/source/jibb
2250+/* tok-611 %txt /tests/golden/types-union-print-nested/tokens/txt
2251+/* tre-611 %txt /tests/golden/types-union-print-nested/tree/txt
2252+/* typ-611 %txt /tests/golden/types-union-print-nested/types/txt
2253+/* src-612 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2254+/* tok-612 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2255+/* tre-612 %txt /tests/golden/types-union-print-same-origin/tree/txt
2256+/* mod-612-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2257+/* typ-612 %txt /tests/golden/types-union-print-same-origin/types/txt
2258+/* mtre-612 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2259+/* src-613 %jibb /tests/golden/types-union-print-transitive/source/jibb
2260+/* tok-613 %txt /tests/golden/types-union-print-transitive/tokens/txt
2261+/* tre-613 %txt /tests/golden/types-union-print-transitive/tree/txt
2262+/* mod-613-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2263+/* mod-613-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2264+/* typ-613 %txt /tests/golden/types-union-print-transitive/types/txt
2265+/* mtre-613 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2266+/* src-614 %jibb /tests/golden/types-union-singleton/source/jibb
2267+/* tok-614 %txt /tests/golden/types-union-singleton/tokens/txt
2268+/* tre-614 %txt /tests/golden/types-union-singleton/tree/txt
2269+/* typ-614 %txt /tests/golden/types-union-singleton/types/txt
2270+/* src-615 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2271+/* tok-615 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2272+/* tre-615 %txt /tests/golden/types-union-tag-atoms/tree/txt
2273+/* typ-615 %txt /tests/golden/types-union-tag-atoms/types/txt
2274+/* src-616 %jibb /tests/golden/types-union-tags/source/jibb
2275+/* tok-616 %txt /tests/golden/types-union-tags/tokens/txt
2276+/* tre-616 %txt /tests/golden/types-union-tags/tree/txt
2277+/* typ-616 %txt /tests/golden/types-union-tags/types/txt
2278+/* src-617 %jibb /tests/golden/types-union-unresolved/source/jibb
2279+/* tok-617 %txt /tests/golden/types-union-unresolved/tokens/txt
2280+/* tre-617 %txt /tests/golden/types-union-unresolved/tree/txt
2281+/* typ-617 %txt /tests/golden/types-union-unresolved/types/txt
2282+/* src-618 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2283+/* tok-618 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2284+/* tre-618 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2285+/* typ-618 %txt /tests/golden/types-union-unresolved-flow/types/txt
2286+/* src-619 %jibb /tests/golden/types-unit-construction/source/jibb
2287+/* tok-619 %txt /tests/golden/types-unit-construction/tokens/txt
2288+/* tre-619 %txt /tests/golden/types-unit-construction/tree/txt
2289+/* typ-619 %txt /tests/golden/types-unit-construction/types/txt
2290+/* src-620 %jibb /tests/golden/types-unit-context/source/jibb
2291+/* tok-620 %txt /tests/golden/types-unit-context/tokens/txt
2292+/* tre-620 %txt /tests/golden/types-unit-context/tree/txt
2293+/* typ-620 %txt /tests/golden/types-unit-context/types/txt
2294+/* src-621 %jibb /tests/golden/types-unit-patterns/source/jibb
2295+/* tok-621 %txt /tests/golden/types-unit-patterns/tokens/txt
2296+/* tre-621 %txt /tests/golden/types-unit-patterns/tree/txt
2297+/* typ-621 %txt /tests/golden/types-unit-patterns/types/txt
2298+/* src-622 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2299+/* tok-622 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2300+/* tre-622 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2301+/* typ-622 %txt /tests/golden/types-value-cycle-shadow/types/txt
2302+/* src-623 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2303+/* tok-623 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2304+/* tre-623 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2305+/* typ-623 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2306+/* src-624 %jibb /tests/golden/types-value-cycles/source/jibb
2307+/* tok-624 %txt /tests/golden/types-value-cycles/tokens/txt
2308+/* tre-624 %txt /tests/golden/types-value-cycles/tree/txt
2309+/* typ-624 %txt /tests/golden/types-value-cycles/types/txt
22422310=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
22432311|%
22442312:: one arm per case
@@ -3299,166 +3367,198 @@
32993367 (weld (check ~.types-prelude-predicates src-527 `tok-527 `tre-527) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-527 `typ-527 ~ ~ ~))
33003368++ test-types-prelude-unit-helpers
33013369 (weld (check ~.types-prelude-unit-helpers src-528 `tok-528 `tre-528) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-528 `typ-528 ~ ~ ~))
3370+++ test-types-proj-explicit-context
3371+ (weld (check ~.types-proj-explicit-context src-529 `tok-529 `tre-529) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-529 `typ-529 ~ ~ ~))
3372+++ test-types-proj-nested-no-implicit
3373+ (weld (check ~.types-proj-nested-no-implicit src-530 `tok-530 `tre-530) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-530 `typ-530 ~ ~ ~))
3374+++ test-types-proj-reserved-imported-definition
3375+ (weld (weld (check ~.types-proj-reserved-imported-definition src-531 `tok-531 `tre-531) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-531 `typ-531 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-531 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]]))
3376+++ test-types-proj-reserved-jibb-import
3377+ (weld (weld (check ~.types-proj-reserved-jibb-import src-532 `tok-532 `tre-532) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-532 `typ-532 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-532 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]]))
3378+++ test-types-proj-reserved-local
3379+ (weld (check ~.types-proj-reserved-local src-533 `tok-533 `tre-533) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-533 `typ-533 ~ ~ ~))
3380+++ test-types-proj-reserved-local-mold
3381+ (weld (check ~.types-proj-reserved-local-mold src-534 `tok-534 `tre-534) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-534 `typ-534 ~ ~ ~))
3382+++ test-types-proj-reserved-mark-import
3383+ (weld (check ~.types-proj-reserved-mark-import src-535 `tok-535 `tre-535) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-535 `typ-535 ~ ~ ~))
3384+++ test-types-proj-reserved-mold
3385+ (weld (check ~.types-proj-reserved-mold src-536 `tok-536 `tre-536) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-536 `typ-536 ~ ~ ~))
3386+++ test-types-proj-reserved-pattern
3387+ (weld (check ~.types-proj-reserved-pattern src-537 `tok-537 `tre-537) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-537 `typ-537 ~ ~ ~))
3388+++ test-types-proj-reserved-positive
3389+ (weld (check ~.types-proj-reserved-positive src-538 `tok-538 `tre-538) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-538 `typ-538 ~ ~ ~))
3390+++ test-types-proj-reserved-sample
3391+ (weld (check ~.types-proj-reserved-sample src-539 `tok-539 `tre-539) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-539 `typ-539 ~ ~ ~))
3392+++ test-types-proj-reserved-sur-import
3393+ (weld (check ~.types-proj-reserved-sur-import src-540 `tok-540 `tre-540) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-540 `typ-540 ~ ~ ~))
3394+++ test-types-proj-reserved-unused-pattern
3395+ (weld (check ~.types-proj-reserved-unused-pattern src-541 `tok-541 `tre-541) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-541 `typ-541 ~ ~ ~))
3396+++ test-types-proj-reserved-unused-sample
3397+ (weld (check ~.types-proj-reserved-unused-sample src-542 `tok-542 `tre-542) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-542 `typ-542 ~ ~ ~))
3398+++ test-types-proj-reserved-unused-value
3399+ (weld (check ~.types-proj-reserved-unused-value src-543 `tok-543 `tre-543) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-543 `typ-543 ~ ~ ~))
3400+++ test-types-proj-reserved-value
3401+ (weld (check ~.types-proj-reserved-value src-544 `tok-544 `tre-544) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-544 `typ-544 ~ ~ ~))
33023402++ test-types-qath-faces
3303− (weld (check ~.types-qath-faces src-529 `tok-529 `tre-529) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-529 `typ-529 ~ ~ ~))
3403+ (weld (check ~.types-qath-faces src-545 `tok-545 `tre-545) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-545 `typ-545 ~ ~ ~))
33043404++ test-types-qath-holes
3305− (weld (check ~.types-qath-holes src-530 `tok-530 `tre-530) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-530 `typ-530 ~ ~ ~))
3405+ (weld (check ~.types-qath-holes src-546 `tok-546 `tre-546) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-546 `typ-546 ~ ~ ~))
33063406++ test-types-qath-module-identity
3307− (weld (weld (check ~.types-qath-module-identity src-531 `tok-531 `tre-531) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-531 `typ-531 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-531-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-531-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-531-3]])) (check-module-trees ~.types-qath-module-identity `mtre-531 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-531-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-531-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-531-3]]))
3407+ (weld (weld (check ~.types-qath-module-identity src-547 `tok-547 `tre-547) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-547 `typ-547 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-547-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-547-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-547-3]])) (check-module-trees ~.types-qath-module-identity `mtre-547 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-547-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-547-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-547-3]]))
33083408++ test-types-qath-recursive
3309− (weld (check ~.types-qath-recursive src-532 `tok-532 `tre-532) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-532 `typ-532 ~ ~ ~))
3409+ (weld (check ~.types-qath-recursive src-548 `tok-548 `tre-548) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-548 `typ-548 ~ ~ ~))
33103410++ test-types-record-bound-variable
3311− (weld (check ~.types-record-bound-variable src-533 `tok-533 `tre-533) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-533 `typ-533))
3411+ (weld (check ~.types-record-bound-variable src-549 `tok-549 `tre-549) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-549 `typ-549))
33123412++ test-types-record-cast-context
3313− (weld (check ~.types-record-cast-context src-534 `tok-534 `tre-534) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-534 `typ-534 ~ ~ ~))
3413+ (weld (check ~.types-record-cast-context src-550 `tok-550 `tre-550) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-550 `typ-550 ~ ~ ~))
33143414++ test-types-record-change
3315− (weld (check ~.types-record-change src-535 `tok-535 `tre-535) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-535 `typ-535 ~ ~ ~))
3415+ (weld (check ~.types-record-change src-551 `tok-551 `tre-551) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-551 `typ-551 ~ ~ ~))
33163416++ test-types-record-change-generic
3317− (weld (check ~.types-record-change-generic src-536 `tok-536 `tre-536) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-536 `typ-536 ~ ~ ~))
3417+ (weld (check ~.types-record-change-generic src-552 `tok-552 `tre-552) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-552 `typ-552 ~ ~ ~))
33183418++ test-types-record-faces
3319− (weld (check ~.types-record-faces src-537 `tok-537 `tre-537) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-537 `typ-537))
3419+ (weld (check ~.types-record-faces src-553 `tok-553 `tre-553) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-553 `typ-553))
33203420++ test-types-record-field-edit-separate
3321− (weld (check ~.types-record-field-edit-separate src-538 `tok-538 `tre-538) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-538 `typ-538))
3421+ (weld (check ~.types-record-field-edit-separate src-554 `tok-554 `tre-554) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-554 `typ-554))
33223422++ test-types-record-field-expr-duplicate
3323− (weld (check ~.types-record-field-expr-duplicate src-539 `tok-539 `tre-539) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-539 `typ-539))
3423+ (weld (check ~.types-record-field-expr-duplicate src-555 `tok-555 `tre-555) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-555 `typ-555))
33243424++ test-types-record-field-expr-separate
3325− (weld (check ~.types-record-field-expr-separate src-540 `tok-540 `tre-540) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-540 `typ-540))
3425+ (weld (check ~.types-record-field-expr-separate src-556 `tok-556 `tre-556) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-556 `typ-556))
33263426++ test-types-record-field-module-reachable
3327− (weld (weld (check ~.types-record-field-module-reachable src-541 `tok-541 `tre-541) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-541 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]]))
3427+ (weld (weld (check ~.types-record-field-module-reachable src-557 `tok-557 `tre-557) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-557 `typ-557 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-557-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-557 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-557-1]]))
33283428++ test-types-record-field-module-unused
3329− (weld (weld (check ~.types-record-field-module-unused src-542 `tok-542 `tre-542) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-542-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-542-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-542 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-542-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-542-2]]))
3429+ (weld (weld (check ~.types-record-field-module-unused src-558 `tok-558 `tre-558) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-558 `typ-558 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-558-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-558-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-558 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-558-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-558-2]]))
33303430++ test-types-record-field-nested-mold
3331− (weld (check ~.types-record-field-nested-mold src-543 `tok-543 `tre-543) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-543 `typ-543))
3431+ (weld (check ~.types-record-field-nested-mold src-559 `tok-559 `tre-559) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-559 `typ-559))
33323432++ test-types-record-field-outer-inner
3333− (weld (check ~.types-record-field-outer-inner src-544 `tok-544 `tre-544) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-544 `typ-544))
3433+ (weld (check ~.types-record-field-outer-inner src-560 `tok-560 `tre-560) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-560 `typ-560))
33343434++ test-types-record-field-sample-duplicate
3335− (weld (check ~.types-record-field-sample-duplicate src-545 `tok-545 `tre-545) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-545 `typ-545))
3435+ (weld (check ~.types-record-field-sample-duplicate src-561 `tok-561 `tre-561) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-561 `typ-561))
33363436++ test-types-record-field-separate-molds
3337− (weld (check ~.types-record-field-separate-molds src-546 `tok-546 `tre-546) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-546 `typ-546))
3437+ (weld (check ~.types-record-field-separate-molds src-562 `tok-562 `tre-562) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-562 `typ-562))
33383438++ test-types-record-field-unused-mold
3339− (weld (check ~.types-record-field-unused-mold src-547 `tok-547 `tre-547) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-547 `typ-547))
3439+ (weld (check ~.types-record-field-unused-mold src-563 `tok-563 `tre-563) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-563 `typ-563))
33403440++ test-types-record-import
3341− (weld (weld (check ~.types-record-import src-548 `tok-548 `tre-548) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]])) (check-module-trees ~.types-record-import `mtre-548 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]]))
3441+ (weld (weld (check ~.types-record-import src-564 `tok-564 `tre-564) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-564 `typ-564 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-564-1]])) (check-module-trees ~.types-record-import `mtre-564 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-564-1]]))
33423442++ test-types-record-local-scheme
3343− (weld (check ~.types-record-local-scheme src-549 `tok-549 `tre-549) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-549 `typ-549))
3443+ (weld (check ~.types-record-local-scheme src-565 `tok-565 `tre-565) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-565 `typ-565))
33443444++ test-types-record-nested
3345− (weld (check ~.types-record-nested src-550 `tok-550 `tre-550) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-550 `typ-550))
3445+ (weld (check ~.types-record-nested src-566 `tok-566 `tre-566) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-566 `typ-566))
33463446++ test-types-record-to-tuple
3347− (weld (check ~.types-record-to-tuple src-551 `tok-551 `tre-551) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-551 `typ-551))
3447+ (weld (check ~.types-record-to-tuple src-567 `tok-567 `tre-567) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-567 `typ-567))
33483448++ test-types-recursion-scc-failures
3349− (weld (check ~.types-recursion-scc-failures src-552 `tok-552 `tre-552) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-552 `typ-552 ~ ~ ~))
3449+ (weld (check ~.types-recursion-scc-failures src-568 `tok-568 `tre-568) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-568 `typ-568 ~ ~ ~))
33503450++ test-types-recursion-scc-groups
3351− (weld (check ~.types-recursion-scc-groups src-553 `tok-553 `tre-553) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-553 `typ-553 ~ ~ ~))
3451+ (weld (check ~.types-recursion-scc-groups src-569 `tok-569 `tre-569) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-569 `typ-569 ~ ~ ~))
33523452++ test-types-recursion-scc-import
3353− (weld (weld (check ~.types-recursion-scc-import src-554 `tok-554 `tre-554) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-554 `typ-554 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-554 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]]))
3453+ (weld (weld (check ~.types-recursion-scc-import src-570 `tok-570 `tre-570) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-570 `typ-570 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-570 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]]))
33543454++ test-types-recursion-scc-import-bad
3355− (weld (weld (check ~.types-recursion-scc-import-bad src-555 `tok-555 `tre-555) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-555 `typ-555 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-555 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]]))
3455+ (weld (weld (check ~.types-recursion-scc-import-bad src-571 `tok-571 `tre-571) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-571 `typ-571 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-571-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-571 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-571-1]]))
33563456++ test-types-recursion-scc-local
3357− (weld (check ~.types-recursion-scc-local src-556 `tok-556 `tre-556) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-556 `typ-556 ~ ~ ~))
3457+ (weld (check ~.types-recursion-scc-local src-572 `tok-572 `tre-572) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-572 `typ-572 ~ ~ ~))
33583458++ test-types-recursion-scc-order
3359− (weld (check ~.types-recursion-scc-order src-557 `tok-557 `tre-557) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-557 `typ-557 ~ ~ ~))
3459+ (weld (check ~.types-recursion-scc-order src-573 `tok-573 `tre-573) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-573 `typ-573 ~ ~ ~))
33603460++ test-types-recursion-scc-shadow
3361− (weld (check ~.types-recursion-scc-shadow src-558 `tok-558 `tre-558) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-558 `typ-558 ~ ~ ~))
3461+ (weld (check ~.types-recursion-scc-shadow src-574 `tok-574 `tre-574) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-574 `typ-574 ~ ~ ~))
33623462++ test-types-recursive-branch
3363− (weld (check ~.types-recursive-branch src-559 `tok-559 `tre-559) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-559 `typ-559 ~ ~ ~))
3463+ (weld (check ~.types-recursive-branch src-575 `tok-575 `tre-575) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-575 `typ-575 ~ ~ ~))
33643464++ test-types-recursive-gate
3365− (weld (check ~.types-recursive-gate src-560 `tok-560 `tre-560) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-560 `typ-560))
3465+ (weld (check ~.types-recursive-gate src-576 `tok-576 `tre-576) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-576 `typ-576))
33663466++ test-types-recursive-sample
3367− (weld (check ~.types-recursive-sample src-561 `tok-561 `tre-561) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-561 `typ-561))
3467+ (weld (check ~.types-recursive-sample src-577 `tok-577 `tre-577) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-577 `typ-577))
33683468++ test-types-scope-library-poke
3369− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-562 `tok-562 `tre-562) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-562 `typ-562 ~ ~ ~))
3469+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-578 `tok-578 `tre-578) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-578 `typ-578 ~ ~ ~))
33703470++ test-types-scope-root-api
3371− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-563 `tok-563 `tre-563) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-563 `typ-563 ~ ~ ~))
3471+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-579 `tok-579 `tre-579) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-579 `typ-579 ~ ~ ~))
33723472++ test-types-scope-store-duplicate
3373− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-564 `tok-564 `tre-564) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-564 `typ-564 ~ ~ ~))
3473+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-580 `tok-580 `tre-580) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-580 `typ-580 ~ ~ ~))
33743474++ test-types-scope-store-shadow
3375− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-565 `tok-565 `tre-565) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-565 `typ-565 ~ ~ ~))
3475+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-581 `tok-581 `tre-581) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-581 `typ-581 ~ ~ ~))
33763476++ test-types-single-case-pattern
3377− (weld (check ~.types-single-case-pattern src-566 `tok-566 `tre-566) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-566 `typ-566 ~ ~ ~))
3477+ (weld (check ~.types-single-case-pattern src-582 `tok-582 `tre-582) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-582 `typ-582 ~ ~ ~))
33783478++ test-types-string-interpolation
3379− (weld (check ~.types-string-interpolation src-567 `tok-567 `tre-567) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-567 `typ-567 ~ ~ ~))
3479+ (weld (check ~.types-string-interpolation src-583 `tok-583 `tre-583) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-583 `typ-583 ~ ~ ~))
33803480++ test-types-tuple-context
3381− (weld (check ~.types-tuple-context src-568 `tok-568 `tre-568) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-568 `typ-568 ~ ~ ~))
3481+ (weld (check ~.types-tuple-context src-584 `tok-584 `tre-584) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-584 `typ-584 ~ ~ ~))
33823482++ test-types-tuple-context-nested
3383− (weld (check ~.types-tuple-context-nested src-569 `tok-569 `tre-569) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-569 `typ-569 ~ ~ ~))
3483+ (weld (check ~.types-tuple-context-nested src-585 `tok-585 `tre-585) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-585 `typ-585 ~ ~ ~))
33843484++ test-types-union-alias
3385− (weld (check ~.types-union-alias src-570 `tok-570 `tre-570) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-570 `typ-570))
3485+ (weld (check ~.types-union-alias src-586 `tok-586 `tre-586) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-586 `typ-586))
33863486++ test-types-union-branch-context
3387− (weld (check ~.types-union-branch-context src-571 `tok-571 `tre-571) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-571 `typ-571))
3487+ (weld (check ~.types-union-branch-context src-587 `tok-587 `tre-587) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-587 `typ-587))
33883488++ test-types-union-branch-pending
3389− (weld (check ~.types-union-branch-pending src-572 `tok-572 `tre-572) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-572 `typ-572))
3489+ (weld (check ~.types-union-branch-pending src-588 `tok-588 `tre-588) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-588 `typ-588))
33903490++ test-types-union-constructor-shape
3391− (weld (check ~.types-union-constructor-shape src-573 `tok-573 `tre-573) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-573 `typ-573))
3491+ (weld (check ~.types-union-constructor-shape src-589 `tok-589 `tre-589) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-589 `typ-589))
33923492++ test-types-union-context-flow
3393− (weld (check ~.types-union-context-flow src-574 `tok-574 `tre-574) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-574 `typ-574))
3493+ (weld (check ~.types-union-context-flow src-590 `tok-590 `tre-590) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-590 `typ-590))
33943494++ test-types-union-finite
3395− (weld (check ~.types-union-finite src-575 `tok-575 `tre-575) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-575 `typ-575 ~ ~ ~))
3495+ (weld (check ~.types-union-finite src-591 `tok-591 `tre-591) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-591 `typ-591 ~ ~ ~))
33963496++ test-types-union-finite-context
3397− (weld (check ~.types-union-finite-context src-576 `tok-576 `tre-576) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-576 `typ-576 ~ ~ ~))
3497+ (weld (check ~.types-union-finite-context src-592 `tok-592 `tre-592) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-592 `typ-592 ~ ~ ~))
33983498++ test-types-union-finite-generic
3399− (weld (check ~.types-union-finite-generic src-577 `tok-577 `tre-577) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-577 `typ-577 ~ ~ ~))
3499+ (weld (check ~.types-union-finite-generic src-593 `tok-593 `tre-593) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-593 `typ-593 ~ ~ ~))
34003500++ test-types-union-finite-limit
3401− (weld (check ~.types-union-finite-limit src-578 `tok-578 `tre-578) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-578 `typ-578 ~ ~ ~))
3501+ (weld (check ~.types-union-finite-limit src-594 `tok-594 `tre-594) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-594 `typ-594 ~ ~ ~))
34023502++ test-types-union-import
3403− (weld (weld (check ~.types-union-import src-579 `tok-579 `tre-579) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-579 `typ-579 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-579-1]])) (check-module-trees ~.types-union-import `mtre-579 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-579-1]]))
3503+ (weld (weld (check ~.types-union-import src-595 `tok-595 `tre-595) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-595 `typ-595 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-595-1]])) (check-module-trees ~.types-union-import `mtre-595 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-595-1]]))
34043504++ test-types-union-local-pending
3405− (weld (check ~.types-union-local-pending src-580 `tok-580 `tre-580) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-580 `typ-580))
3505+ (weld (check ~.types-union-local-pending src-596 `tok-596 `tre-596) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-596 `typ-596))
34063506++ test-types-union-nonwing-subject
3407− (weld (check ~.types-union-nonwing-subject src-581 `tok-581 `tre-581) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-581 `typ-581 ~ ~ ~))
3507+ (weld (check ~.types-union-nonwing-subject src-597 `tok-597 `tre-597) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-597 `typ-597 ~ ~ ~))
34083508++ test-types-union-overlap
3409− (weld (check ~.types-union-overlap src-582 `tok-582 `tre-582) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-582 `typ-582))
3509+ (weld (check ~.types-union-overlap src-598 `tok-598 `tre-598) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-598 `typ-598))
34103510++ test-types-union-overlap-nested
3411− (weld (check ~.types-union-overlap-nested src-583 `tok-583 `tre-583) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-583 `typ-583))
3511+ (weld (check ~.types-union-overlap-nested src-599 `tok-599 `tre-599) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-599 `typ-599))
34123512++ test-types-union-pattern-result-context
3413− (weld (check ~.types-union-pattern-result-context src-584 `tok-584 `tre-584) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-584 `typ-584 ~ ~ ~))
3513+ (weld (check ~.types-union-pattern-result-context src-600 `tok-600 `tre-600) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-600 `typ-600 ~ ~ ~))
34143514++ test-types-union-pattern-result-controls
3415− (weld (check ~.types-union-pattern-result-controls src-585 `tok-585 `tre-585) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-585 `typ-585 ~ ~ ~))
3515+ (weld (check ~.types-union-pattern-result-controls src-601 `tok-601 `tre-601) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-601 `typ-601 ~ ~ ~))
34163516++ test-types-union-patterns
3417− (weld (check ~.types-union-patterns src-586 `tok-586 `tre-586) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-586 `typ-586 ~ ~ ~))
3517+ (weld (check ~.types-union-patterns src-602 `tok-602 `tre-602) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-602 `typ-602 ~ ~ ~))
34183518++ test-types-union-patterns-generic
3419− (weld (check ~.types-union-patterns-generic src-587 `tok-587 `tre-587) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-587 `typ-587 ~ ~ ~))
3519+ (weld (check ~.types-union-patterns-generic src-603 `tok-603 `tre-603) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-603 `typ-603 ~ ~ ~))
34203520++ test-types-union-patterns-import
3421− (weld (weld (check ~.types-union-patterns-import src-588 `tok-588 `tre-588) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-588 `typ-588 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-588-1]])) (check-module-trees ~.types-union-patterns-import `mtre-588 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-588-1]]))
3521+ (weld (weld (check ~.types-union-patterns-import src-604 `tok-604 `tre-604) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-604 `typ-604 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]])) (check-module-trees ~.types-union-patterns-import `mtre-604 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]]))
34223522++ test-types-union-phantom-generic
3423− (weld (check ~.types-union-phantom-generic src-589 `tok-589 `tre-589) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-589 `typ-589))
3523+ (weld (check ~.types-union-phantom-generic src-605 `tok-605 `tre-605) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-605 `typ-605))
34243524++ test-types-union-polymorphic-identity
3425− (weld (weld (check ~.types-union-polymorphic-identity src-590 `tok-590 `tre-590) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-590 `typ-590 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-590-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-590-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-590 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-590-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-590-2]]))
3525+ (weld (weld (check ~.types-union-polymorphic-identity src-606 `tok-606 `tre-606) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-606 `typ-606 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-606-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-606-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-606 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-606-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-606-2]]))
34263526++ test-types-union-print-cross-namespace
3427− (weld (weld (check ~.types-union-print-cross-namespace src-591 `tok-591 `tre-591) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-591 `typ-591 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-591-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-591 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-591-1]]))
3527+ (weld (weld (check ~.types-union-print-cross-namespace src-607 `tok-607 `tre-607) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-607 `typ-607 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-607-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-607 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-607-1]]))
34283528++ test-types-union-print-distinct
3429− (weld (weld (check ~.types-union-print-distinct src-592 `tok-592 `tre-592) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-592 `typ-592 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-592-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-592-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-592-3]])) (check-module-trees ~.types-union-print-distinct `mtre-592 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-592-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-592-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-592-3]]))
3529+ (weld (weld (check ~.types-union-print-distinct src-608 `tok-608 `tre-608) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-608 `typ-608 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-608-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-608-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-608-3]])) (check-module-trees ~.types-union-print-distinct `mtre-608 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-608-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-608-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-608-3]]))
34303530++ test-types-union-print-escape
3431− (weld (check ~.types-union-print-escape src-593 `tok-593 `tre-593) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-593 `typ-593))
3531+ (weld (check ~.types-union-print-escape src-609 `tok-609 `tre-609) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-609 `typ-609))
34323532++ test-types-union-print-local
3433− (weld (check ~.types-union-print-local src-594 `tok-594 `tre-594) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-594 `typ-594))
3533+ (weld (check ~.types-union-print-local src-610 `tok-610 `tre-610) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-610 `typ-610))
34343534++ test-types-union-print-nested
3435− (weld (check ~.types-union-print-nested src-595 `tok-595 `tre-595) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-595 `typ-595))
3535+ (weld (check ~.types-union-print-nested src-611 `tok-611 `tre-611) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-611 `typ-611))
34363536++ test-types-union-print-same-origin
3437− (weld (weld (check ~.types-union-print-same-origin src-596 `tok-596 `tre-596) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-596 `typ-596 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-596-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-596 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-596-1]]))
3537+ (weld (weld (check ~.types-union-print-same-origin src-612 `tok-612 `tre-612) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-612 `typ-612 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-612-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-612 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-612-1]]))
34383538++ test-types-union-print-transitive
3439− (weld (weld (check ~.types-union-print-transitive src-597 `tok-597 `tre-597) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-597 `typ-597 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-597-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-597-2]])) (check-module-trees ~.types-union-print-transitive `mtre-597 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-597-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-597-2]]))
3539+ (weld (weld (check ~.types-union-print-transitive src-613 `tok-613 `tre-613) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-613 `typ-613 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-613-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-613-2]])) (check-module-trees ~.types-union-print-transitive `mtre-613 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-613-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-613-2]]))
34403540++ test-types-union-singleton
3441− (weld (check ~.types-union-singleton src-598 `tok-598 `tre-598) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-598 `typ-598))
3541+ (weld (check ~.types-union-singleton src-614 `tok-614 `tre-614) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-614 `typ-614))
34423542++ test-types-union-tag-atoms
3443− (weld (check ~.types-union-tag-atoms src-599 `tok-599 `tre-599) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-599 `typ-599))
3543+ (weld (check ~.types-union-tag-atoms src-615 `tok-615 `tre-615) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-615 `typ-615))
34443544++ test-types-union-tags
3445− (weld (check ~.types-union-tags src-600 `tok-600 `tre-600) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-600 `typ-600))
3545+ (weld (check ~.types-union-tags src-616 `tok-616 `tre-616) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-616 `typ-616))
34463546++ test-types-union-unresolved
3447− (weld (check ~.types-union-unresolved src-601 `tok-601 `tre-601) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-601 `typ-601))
3547+ (weld (check ~.types-union-unresolved src-617 `tok-617 `tre-617) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-617 `typ-617))
34483548++ test-types-union-unresolved-flow
3449− (weld (check ~.types-union-unresolved-flow src-602 `tok-602 `tre-602) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-602 `typ-602))
3549+ (weld (check ~.types-union-unresolved-flow src-618 `tok-618 `tre-618) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-618 `typ-618))
34503550++ test-types-unit-construction
3451− (weld (check ~.types-unit-construction src-603 `tok-603 `tre-603) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-603 `typ-603 ~ ~ ~))
3551+ (weld (check ~.types-unit-construction src-619 `tok-619 `tre-619) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-619 `typ-619 ~ ~ ~))
34523552++ test-types-unit-context
3453− (weld (check ~.types-unit-context src-604 `tok-604 `tre-604) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-604 `typ-604 ~ ~ ~))
3553+ (weld (check ~.types-unit-context src-620 `tok-620 `tre-620) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-620 `typ-620 ~ ~ ~))
34543554++ test-types-unit-patterns
3455− (weld (check ~.types-unit-patterns src-605 `tok-605 `tre-605) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-605 `typ-605))
3555+ (weld (check ~.types-unit-patterns src-621 `tok-621 `tre-621) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-621 `typ-621))
34563556++ test-types-value-cycle-shadow
3457− (weld (check ~.types-value-cycle-shadow src-606 `tok-606 `tre-606) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-606 `typ-606 ~ ~ ~))
3557+ (weld (check ~.types-value-cycle-shadow src-622 `tok-622 `tre-622) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-622 `typ-622 ~ ~ ~))
34583558++ test-types-value-cycle-unsupported
3459− (weld (check ~.types-value-cycle-unsupported src-607 `tok-607 `tre-607) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-607 `typ-607 ~ ~ ~))
3559+ (weld (check ~.types-value-cycle-unsupported src-623 `tok-623 `tre-623) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-623 `typ-623 ~ ~ ~))
34603560++ test-types-value-cycles
3461− (weld (check ~.types-value-cycles src-608 `tok-608 `tre-608) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-608 `typ-608 ~ ~ ~))
3561+ (weld (check ~.types-value-cycles src-624 `tok-624 `tre-624) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-624 `typ-624 ~ ~ ~))
34623562::
34633563:: +check: run golden:jibb on a case and compare both outputs
34643564::
tools/type-proj-guards-testnew file+32
@@ -0,0 +1,32 @@
1+#!/usr/bin/env python3
2+"""Run the shared proj lowering and API reservation guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-proj-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ real-prelude=@t prelude\n'
16+ '=/ real-internal=@t internal\n=/ suite\n' + tests +
17+ '\n=/ failures=(list tape) proj-guard-errors:suite\n^- @t\n'
18+ "?~ failures 'proj guards passed'\n"
19+ '(of-wain:format (turn failures crip))\n')
20+with tempfile.TemporaryDirectory(prefix='jibb-proj-guards-') as tmp:
21+ program = Path(tmp) / 'guards.hoon'
22+ program.write_text(expression)
23+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
24+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
25+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
26+ result = subprocess.run(command, stdout=subprocess.PIPE)
27+if result.returncode:
28+ sys.exit(result.returncode)
29+if result.stdout != b'proj guards passed\n':
30+ sys.stderr.buffer.write(result.stdout)
31+ sys.exit(1)
32+print('proj lowering and API reservation guards passed')