@@ -5674,7 +5674,8 @@
56745674 %jrec [%yes & fuel ~]
56755675 ==
56765676::
5677−+$ 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)]
5677++$ igate-prelude-evidence [iface=ifile gates=(map term def)]
5678++$ 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) gate-defs=(map term def) head-evidence=(unit igate-prelude-evidence)]
56785679+$ idiag [msg=tape sites=(list [at=span note=tape])]
56795680+$ iresult (each [typ=itype state=istate] idiag)
56805681+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -8257,6 +8258,234 @@
82578258 ?: ?=(%| -.out) [%| p.out]
82588259 [%& [e typ.p.out sub.state.p.out (flop projections.state.p.out)]]
82598260::
8261+:: Source-bound gate-layout evidence, confined to checked root gate
8262+:: definitions and direct unshadowed prelude calls. The prepared prelude
8263+:: interface and its retained source are trusted as a matching artifact.
8264+:: Layouts identify sample binder faces; they do not change call arity or
8265+:: authorize stripping nested value faces. Unknown origins use ordinary fit.
8266+++ direct-written-gates
8267+ |= [ds=(list def) out=ivisited]
8268+ ^- ivisited
8269+ ?~ ds out
8270+ ?: ?=(%mold -.i.ds) $(ds t.ds)
8271+ ?. |(?=(%gate -.val.i.ds) ?=(%gate-wide -.val.i.ds)) $(ds t.ds)
8272+ $(ds t.ds, out (~(put by out) name.i.ds &))
8273+++ direct-may-use-prelude
8274+ |= [ds=(list def) root=ivisited heads=ivisited]
8275+ ^- ?
8276+ ?~ ds |
8277+ ?: ?=(%mold -.i.ds) $(ds t.ds)
8278+ =/ refs=(list term) (dependency-expr val.i.ds)
8279+ =/ has-root=? (lien refs |=(n=term ?=(^ (~(get by root) n))))
8280+ =/ has-head=? (lien refs |=(n=term ?=(^ (~(get by heads) n))))
8281+ ?: &(has-root has-head) &
8282+ $(ds t.ds)
8283+++ direct-unique-names
8284+ |= [names=(list term) seen=ivisited]
8285+ ^- ?
8286+ ?~ names &
8287+ ?: ?=(^ (~(get by seen) i.names)) |
8288+ $(names t.names, seen (~(put by seen) i.names &))
8289+++ direct-prelude-evidence
8290+ |= [ds=(list def) prelude=(unit ifile)]
8291+ ^- (unit igate-prelude-evidence)
8292+ ?~ prelude ~
8293+ ?~ source.u.prelude ~
8294+ =/ root=ivisited (direct-written-gates ds ~)
8295+ =/ names=(list term) (turn values.u.prelude |=(e=[name=term scheme=ischeme] name.e))
8296+ =/ heads=ivisited (graph-nameset names ~)
8297+ ?. (direct-may-use-prelude ds root heads) ~
8298+ =/ parsed (parse at.u.prelude u.source.u.prelude)
8299+ ?: ?=(%| -.parsed) ~
8300+ ?^ (duplicate-defs defs.p.parsed) ~
8301+ ?. (direct-unique-names (global-value-names defs.p.parsed) ~) ~
8302+ =/ gates=(map term def) (direct-checked-gates defs.p.parsed values.u.prelude)
8303+ `[u.prelude gates]
8304+++ direct-checked-gates
8305+ |= [ds=(list def) env=ienv]
8306+ ^- (map term def)
8307+ =/ names=(list term) (turn env |=(e=[name=term scheme=ischeme] name.e))
8308+ =/ known=ivisited (graph-nameset names ~)
8309+ =/ out=(map term def) ~
8310+ |-
8311+ ?~ ds out
8312+ =/ d=def i.ds
8313+ ?: ?=(%mold -.d) $(ds t.ds)
8314+ ?. ?=(^ (~(get by known) name.d)) $(ds t.ds)
8315+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) $(ds t.ds)
8316+ $(ds t.ds, out (~(put by out) name.d d))
8317+++ direct-find-gate
8318+ |= [n=term ds=(list def)]
8319+ ^- (unit def)
8320+ ?~ ds ~
8321+ ?: &(?=(%value -.i.ds) =(n name.i.ds)) `i.ds
8322+ $(ds t.ds)
8323+++ direct-gate-sample
8324+ |= d=def
8325+ ^- (unit sample)
8326+ ?. ?=(%value -.d) ~
8327+ ?- -.val.d
8328+ %gate `sample.val.d
8329+ %gate-wide `sample.val.d
8330+ * ~
8331+ ==
8332+++ direct-sample-name
8333+ |= sam=sample
8334+ ^- (unit term)
8335+ ?- -.sam
8336+ %bind `name.sam
8337+ %face `name.sam
8338+ %pun `name.sam
8339+ * ~
8340+ ==
8341+++ direct-field-name
8342+ |= f=field
8343+ ^- (unit term)
8344+ ?- -.f
8345+ %face `name.f
8346+ %pun `name.f
8347+ * ~
8348+ ==
8349+++ direct-slot-body
8350+ |= [typ=itype name=(unit term)]
8351+ ^- (unit itype)
8352+ ?~ name `typ
8353+ ?. ?=(%face -.typ) ~
8354+ ?. =(name.typ u.name) ~
8355+ `body.typ
8356+++ direct-invariant
8357+ |= [a=itype b=itype sub=isub next=@ud]
8358+ ^- ifit
8359+ ?: (itype-face-asym a b sub) [%unknown ~]
8360+ =/ forward=ifit (itype-fit a b sub next)
8361+ ?. ?=(%ok -.forward) [%unknown ~]
8362+ ?: (itype-face-asym a b sub.forward) [%unknown ~]
8363+ =/ reverse=ifit (itype-fit b a sub.forward next.forward)
8364+ ?. ?=(%ok -.reverse) [%unknown ~]
8365+ reverse
8366+++ direct-function-fit
8367+ |= [a=itype b=itype sam=sample sh=shape sub=isub next=@ud]
8368+ ^- ifit
8369+ ?. &(?=(%fn -.a) ?=(%fn -.b) ?=(%cell -.sam) ?=(%fn -.sh)) [%unknown ~]
8370+ ?. ?=(%cell -.sample.sh) [%unknown ~]
8371+ =/ as=(list sample) items.sam
8372+ =/ bs=(list field) fields.sample.sh
8373+ ?~ as [%unknown ~]
8374+ ?~ t.as [%unknown ~]
8375+ ?^ t.t.as [%unknown ~]
8376+ ?~ bs [%unknown ~]
8377+ ?~ t.bs [%unknown ~]
8378+ ?^ t.t.bs [%unknown ~]
8379+ ?. &(?=(%cell -.sample.a) ?=(%cell -.sample.b)) [%unknown ~]
8380+ =/ an=(unit term) (direct-sample-name i.as)
8381+ =/ bn=(unit term) (direct-field-name i.bs)
8382+ ?: &(?=(^ an) ?=(^ bn) !=(u.an u.bn)) [%unknown ~]
8383+ =/ x=(unit itype) (direct-slot-body hed.sample.a an)
8384+ =/ y=(unit itype) (direct-slot-body hed.sample.b bn)
8385+ ?~ x [%unknown ~]
8386+ ?~ y [%unknown ~]
8387+ =/ first=ifit (direct-invariant u.x u.y sub next)
8388+ ?. ?=(%ok -.first) [%unknown ~]
8389+ =. an (direct-sample-name i.t.as)
8390+ =. bn (direct-field-name i.t.bs)
8391+ ?: &(?=(^ an) ?=(^ bn) !=(u.an u.bn)) [%unknown ~]
8392+ =/ x2=(unit itype) (direct-slot-body tal.sample.a an)
8393+ =/ y2=(unit itype) (direct-slot-body tal.sample.b bn)
8394+ ?~ x2 [%unknown ~]
8395+ ?~ y2 [%unknown ~]
8396+ =/ second=ifit (direct-invariant u.x2 u.y2 sub.first next.first)
8397+ ?. ?=(%ok -.second) [%unknown ~]
8398+ (direct-invariant product.a product.b sub.second next.second)
8399+:: This is a tentative proof: its caller must require closed call samples
8400+:: and repeat every positional check under the stable final substitution.
8401+++ direct-positional-fit
8402+ |= [args=(list expr) slots=(list sample) actual=itype expected=itype env=ienv state=istate sub=isub next=@ud]
8403+ ^- ifit
8404+ ?~ args [%unknown ~]
8405+ ?~ slots [%unknown ~]
8406+ =/ last=? ?=(~ t.args)
8407+ ?: !=(last ?=(~ t.slots)) [%unknown ~]
8408+ =/ split=(unit [left=itype right=itype])
8409+ ?: last `[actual expected]
8410+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
8411+ `[hed.actual hed.expected]
8412+ ?~ split [%unknown ~]
8413+ =/ x=itype left.u.split
8414+ =/ y=itype right.u.split
8415+ =/ expected-name=(unit term) (direct-sample-name i.slots)
8416+ =/ expected-body=(unit itype) (direct-slot-body y expected-name)
8417+ ?~ expected-body [%unknown ~]
8418+ =. y u.expected-body
8419+ =/ fit=ifit (itype-fit x y sub next)
8420+ =/ accepted=? &(?=(%ok -.fit) !(itype-positional-slot-face-asym x y sub.fit))
8421+ =/ result=(unit ifit)
8422+ ?: accepted `fit
8423+ ?. &(?=(%face -.i.slots) ?=(%fn -.shape.i.slots)) ~
8424+ ?. ?=(%wing -.i.args) ~
8425+ ?. ?=([@ ~] names.i.args) ~
8426+ ?. (unique-value-name i.names.i.args globals.state) ~
8427+ =/ source=(unit def) (~(get by gate-defs.state) i.names.i.args)
8428+ ?~ source ~
8429+ =/ sample=(unit sample) (direct-gate-sample u.source)
8430+ ?~ sample ~
8431+ =/ trial=ifit (direct-function-fit x y u.sample shape.i.slots sub next)
8432+ ?. ?=(%ok -.trial) ~
8433+ `trial
8434+ ?~ result [%unknown ~]
8435+ =. fit u.result
8436+ ?: last fit
8437+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) [%unknown ~]
8438+ ?. ?=(%ok -.fit) [%unknown ~]
8439+ $(args t.args, slots t.slots, actual tal.actual, expected tal.expected, sub sub.fit, next next.fit)
8440+++ direct-any-gate-arg
8441+ |= [args=(list expr) defs=(map term def)]
8442+ ^- ?
8443+ ?~ args |
8444+ =/ found=?
8445+ ?. ?=(%wing -.i.args) |
8446+ ?. ?=([@ ~] names.i.args) |
8447+ ?=(^ (~(get by defs) i.names.i.args))
8448+ ?: found &
8449+ $(args t.args)
8450+++ direct-gate-call-fit
8451+ |= [e=expr actual=itype expected=itype env=ienv state=istate]
8452+ ^- (unit ifit)
8453+ ?. ?=(%call -.e) ~
8454+ ?~ args.e ~
8455+ ?~ t.args.e ~
8456+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
8457+ ?. ?=(%wing -.head.e) ~
8458+ ?. ?=([@ ~] names.head.e) ~
8459+ ?. ?=(~ (ienv-lookup i.names.head.e env)) ~
8460+ ?. (unique-value-name i.names.head.e globals.state) ~
8461+ ?. (direct-any-gate-arg args.e gate-defs.state) ~
8462+ ?~ prelude.state ~
8463+ ?~ source.u.prelude.state ~
8464+ ?~ head-evidence.state ~
8465+ ?. =(u.prelude.state iface.u.head-evidence.state) ~
8466+ ?. ?=(^ (ienv-lookup i.names.head.e values.u.prelude.state)) ~
8467+ =/ head=(unit def) (~(get by gates.u.head-evidence.state) i.names.head.e)
8468+ ?~ head ~
8469+ =/ sam=(unit sample) (direct-gate-sample u.head)
8470+ ?~ sam ~
8471+ ?. ?=(%cell -.u.sam) ~
8472+ =/ fit=ifit (direct-positional-fit args.e items.u.sam actual expected env state sub.state next.state)
8473+ ?. ?=(%ok -.fit) ~
8474+ :: Enclosing inference may add constraints after this call. Only a
8475+ :: closed call-sample proof can remain stable under those later bindings.
8476+ =/ actual-final=itype (itype-normalize actual sub.fit)
8477+ =/ expected-final=itype (itype-normalize expected sub.fit)
8478+ ?^ (itype-vars actual-final) ~
8479+ ?^ (itype-vars expected-final) ~
8480+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
8481+ :: A later argument may resolve a variable used by an earlier slot.
8482+ :: Recheck every fit and face against the completed substitution; no
8483+ :: additional binding or fresh variable is permitted in the second pass.
8484+ =/ verified=ifit (direct-positional-fit args.e items.u.sam actual expected env state sub.fit next.fit)
8485+ ?. ?=(%ok -.verified) ~
8486+ ?. &(=(sub.fit sub.verified) =(next.fit next.verified)) ~
8487+ `fit
8488+::
82608489++ infer-call-with-head
82618490 |= [e=expr env=ienv state=istate head=iresult]
82628491 ^- iresult
@@ -8283,6 +8512,10 @@
82838512 =/ fit=ifit
82848513 ?^ t.args.e (itype-fit-inner typ.p.arg sample.ht sub.st next.st & |)
82858514 (itype-fit typ.p.arg sample.ht sub.st next.st)
8515+ =/ direct=(unit ifit)
8516+ ?: ?=(%ok -.fit) ~
8517+ (direct-gate-call-fit e typ.p.arg sample.ht env st)
8518+ =. fit ?~(direct fit u.direct)
82868519 ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
82878520 ?: ?=(%bad -.fit)
82888521 ?~ t.args.e
@@ -8299,6 +8532,7 @@
82998532 =/ arg-type=itype ?~(bad typ.p.arg typ.u.bad)
83008533 [%| ["call's sample and argument types do not unify" ~[[(span-of head.e) (site-type-note "called gate" ht sub.st)] [arg-at (site-type-note "argument" arg-type sub.st)]]]]
83018534 =/ face-asym=?
8535+ ?^ direct |
83028536 ?^ t.args.e (itype-positional-face-asym args.e typ.p.arg sample.ht sub.fit)
83038537 (itype-face-asym typ.p.arg sample.ht sub.fit)
83048538 ?: &((itype-has-face typ.p.arg sub.fit) face-asym (itype-output-may-be-cell product.ht sub.fit))
@@ -9130,6 +9364,7 @@
91309364++ infer-recursive-gate
91319365 |= [d=def env=ienv state=istate]
91329366 ^- iresult
9367+ =. gate-defs.state ~
91339368 ?. ?=(%value -.d) [%| ["recursive definition is not a gate" ~]]
91349369 ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
91359370 [%| ["recursive definition is not a gate" ~]]
@@ -9358,7 +9593,7 @@
93589593 [%| ["recursive group contains duplicate names" ~]]
93599594 ?: (lien names |=(n=term ?=(^ (ienv-lookup n env))))
93609595 [%| ["recursive group shadows a name" ~]]
9361− =/ scoped=istate state(globals (weld names globals.state))
9596+ =/ scoped=istate state(globals (weld names globals.state), gate-defs ~)
93629597 =/ seeded=igate-seeds (seed-gate-group ds env scoped)
93639598 ?: ?=(%| -.seeded) seeded
93649599 =/ seeds=ienv (group-seed-env entries.p.seeded ~)
@@ -9392,7 +9627,7 @@
93929627 `[entry u.rest]
93939628::
93949629++ add-supported-defs
9395− |= [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)]
9630+ |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) 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)]
93969631 ^- [env=ienv artifacts=(list iwidth-definition)]
93979632 ?~ ds [env artifacts]
93989633 =/ d=def i.ds
@@ -9400,7 +9635,9 @@
94009635 ?. (unique-value-name name.d globals) $(ds t.ds)
94019636 ?^ (ienv-lookup name.d env) $(ds t.ds)
94029637 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9403− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9638+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
9639+ =. gate-defs.initial checked
9640+ =. head-evidence.initial heads
94049641 =. initial (reserve-def-caps val.d initial)
94059642 =/ result=iresult (infer-fragment val.d env initial)
94069643 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
@@ -9419,7 +9656,8 @@
94199656 ?~ finalized $(ds t.ds)
94209657 =? artifacts ?=(^ u.finalized)
94219658 [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
9422− $(ds t.ds, env [[name.d [typ vars]] env])
9659+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
9660+ $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
94239661::
94249662+$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
94259663+$ iadj (map term (list term))
@@ -9542,10 +9780,11 @@
95429780 =/ graph=iadj (graph-make-forward ds nameset ~)
95439781 =/ components=icomponents (graph-components ds names)
95449782 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9783+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
95459784 |-
95469785 =/ next=[env=ienv artifacts=(list iwidth-definition)]
9547− (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9548− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9786+ (add-supported-defs ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9787+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
95499788 =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
95509789 ?: =(env env.out) out
95519790 $(env env.out, grouped grouped.out, artifacts artifacts.out)
@@ -10418,7 +10657,7 @@
1041810657 =/ source-unit=(unit ischeme)
1041910658 ?~ unit-decl ~
1042010659 =/ unit-molds=imolds ~[[%unit u.unit-decl]]
10421− =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~]
10660+ =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~]
1042210661 =/ unit-types=imold-types (partial-prelude-molds unit-molds unit-state)
1042310662 =/ unit-iface=ifile [~ unit-types /lib/jibb/prelude/jibb ~ ~ ~ ~ ~]
1042410663 =/ found=(unit ischeme) (find-jibb-mold %unit unit-iface)
@@ -10433,7 +10672,7 @@
1043310672 =/ js=ijimports ~[[face.i.imports.mod primitive]]
1043410673 =/ reserved=(list term) ~[face.i.imports.mod]
1043510674 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10436− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~]
10675+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~]
1043710676 =/ mts=(each imold-types @t) (module-mold-types molds state)
1043810677 =/ usable=(unit imold-types)
1043910678 ?: ?=(%& -.mts) `p.mts
@@ -10489,7 +10728,7 @@
1048910728 =? env-molds declared
1049010729 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
1049110730 =/ reserved=(list term) ?:(declared ~[%list] ~)
10492− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~]
10731+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~]
1049310732 :: Other prelude molds may use list only after its source has passed
1049410733 :: the standard-list check. The raw declaration remains removed.
1049510734 =/ declared-list=(unit shape) (find-simple-mold %list molds)
@@ -11018,7 +11257,7 @@
1101811257 =/ surs=(list term) (collect-sur-imports imports.mod)
1101911258 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1102011259 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11021− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~]
11260+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
1102211261 =/ mts=(each imold-types @t) (module-mold-types molds state)
1102311262 ?: ?=(%| -.mts) [%| p.mts]
1102411263 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11052,7 +11291,7 @@
1105211291 =/ surs=(list term) (collect-sur-imports imports.mod)
1105311292 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1105411293 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11055− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~]
11294+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
1105611295 =/ mts=(each imold-types @t) (module-mold-types molds state)
1105711296 ?: ?=(%| -.mts) [%| p.mts]
1105811297 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11434,7 +11673,7 @@
1143411673 =/ marks=(list term) (collect-mark-imports imports.mod)
1143511674 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1143611675 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11437− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~]
11676+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
1143811677 =/ mts=(each imold-types @t) (module-mold-types molds state)
1143911678 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
1144011679 =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
@@ -11490,7 +11729,7 @@
1149011729 =/ declared=(list term) (collect-mark-imports imports.mod)
1149111730 =/ reserved=(list term) (weld molds.u.prepared (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1149211731 =/ top=(list term) (turn ms |=(m=[name=term body=shape] name.m))
11493− =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~]
11732+ =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~]
1149411733 =/ inferred=(unit [template=ischeme state=istate])
1149511734 (infer-mold-template shape.i.selected state(active ~[name], in-mold &))
1149611735 ?~ inferred [%| 'selected mold needs unsupported inference']
@@ -11607,6 +11846,8 @@
1160711846 =/ resolution=iresolved (resolve-groups ds molds globals externals surs mark-externals marks jimports reserved-molds file prelude)
1160811847 =/ cycles=(list icycle) (definite-value-cycles ds globals)
1160911848 =/ env=ienv env.resolution
11849+ =/ source-defs=(map term def) (direct-checked-gates ds env)
11850+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
1161011851 =/ lines=(list @t) ~
1161111852 |-
1161211853 ?~ ds (of-wain:format ['partial inference; module not checked' (flop lines)])
@@ -11626,7 +11867,9 @@
1162611867 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
1162711868 $(ds t.ds, lines [line lines])
1162811869 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11629− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~]
11870+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
11871+ =. gate-defs.initial source-defs
11872+ =. head-evidence.initial heads
1163011873 =. initial (reserve-def-caps val.d initial)
1163111874 =/ result=iresult
1163211875 ?: |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))