@@ -10237,6 +10237,29 @@
10237 (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10237 (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10240++$ iadded-definition
10241+ [env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10242+++ add-supported-result
10243+ |= [d=def result=iresult initial=istate env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10244+ ^- (unit iadded-definition)
10246+ ?: ?=(%| -.result) ~
10247+ =. state.p.result (promote-restricted-numbers state.p.result env)
10248+ =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
10249+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) ~
10250+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) ~
10251+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10252+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
10253+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
10254+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10255+ ?: (gth (lent vars) 26) ~
10256+ =/ finalized=(unit (list iwprojection))
10257+ (width-finalize projections.state.p.result sub.state.p.result vars)
10259+ =? artifacts ?=(^ u.finalized)
10260+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10261+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10262+ `[[[name.d [typ vars]] env] checked artifacts]
10240++ add-supported-defs-core
10263++ add-supported-defs-core
10241 |= [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) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10264 |= [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) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10242 ^- [env=ienv artifacts=(list iwidth-definition)]
10265 ^- [env=ienv artifacts=(list iwidth-definition)]
@@ -10253,23 +10276,10 @@
10253 =. initial (reserve-def-caps val.d initial)
10276 =. initial (reserve-def-caps val.d initial)
10254 =/ result=iresult (infer-fragment val.d env initial)
10277 =/ result=iresult (infer-fragment val.d env initial)
10255 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10278 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10256− ?: ?=(%| -.result) $(ds t.ds)
10279+ =/ added=(unit iadded-definition)
10257− =. state.p.result (promote-restricted-numbers state.p.result env)
10280+ (add-supported-result d result initial env checked artifacts)
10258− =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
10259− ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
10260− ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
10261− =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10262− ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
10263− ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
10264− =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10265− ?: (gth (lent vars) 26) $(ds t.ds)
10266− =/ finalized=(unit (list iwprojection))
10267− (width-finalize projections.state.p.result sub.state.p.result vars)
10268− ?~ finalized $(ds t.ds)
10281+ ?~ added $(ds t.ds)
10269− =? artifacts ?=(^ u.finalized)
10282+ $(ds t.ds, env env.u.added, checked checked.u.added, artifacts artifacts.u.added)
10270− [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10271− =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10272− $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
10274++ resolve-groups-core
10284++ resolve-groups-core
10275 |= [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) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10285 |= [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) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
@@ -12466,6 +12476,19 @@
12466 ?. ?=([@ ~] names.e) ~
12476 ?. ?=([@ ~] names.e) ~
12467 `i.names.e
12477 `i.names.e
12479+++ program-main-args
12481+ ^- (unit (list expr))
12482+ ?. ?=(%value -.d) ~
12484+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12485+ ?. ?=(%call -.val.d) ~
12486+ =/ head=(unit term) (program-main-wing head.val.d)
12488+ ?. =(%program u.head) ~
12489+ ?. ?=([* * * * ~] args.val.d) ~
12469++ program-main-parts
12492++ program-main-parts
12470 |= d=def
12493 |= d=def
12471 ^- (unit [init=term update=term view=term subs=term])
12494 ^- (unit [init=term update=term view=term subs=term])
@@ -12510,6 +12533,141 @@
12536+++ program-transparent
12540+ %group $(e inner.e)
12542+ %body ?~(defs.e $(e final.e) e)
12545+++ program-init-tuple-null
12548+ ?. ?=(%value -.d) |
12549+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12553+ %gate-wide body.val.d
12556+ =. body (program-transparent body)
12557+ ?. ?=(%tuple -.body) |
12559+ (program-empty-null val:(rear items.body))
12561+:: Recover only the initializer of an already recognized direct program main.
12562+:: The derived call is evidence for an ordinary init/main retry, never an
12563+:: interface to publish on its own. Any failure returns the original resolution.
12564+++ program-init-context
12565+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
12566+ ^- (unit iresolved)
12567+ =/ env=ienv env.resolution
12568+ ?^ (ienv-lookup %main env) ~
12569+ ?^ (ienv-lookup init.parts env) ~
12570+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
12571+ =/ view=(unit ischeme) (ienv-lookup view.parts env)
12572+ =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
12576+ =/ inits=(list def)
12577+ (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
12578+ ?. ?=([* ~] inits) ~
12579+ =/ init-def=def i.inits
12580+ ?> ?=(%value -.init-def)
12581+ ?. (program-init-tuple-null init-def) ~
12582+ =/ args=(unit (list expr)) (program-main-args main)
12584+ ?~ prelude.initial ~
12585+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
12587+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
12589+ =/ written=(unit def) (~(get by gates.u.heads) %program)
12591+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
12592+ ?~ written-sample ~
12593+ ?. ?=(%cell -.u.written-sample) ~
12594+ ?~ items.u.written-sample ~
12595+ =/ checked=(map term def) (direct-checked-gates ds env)
12597+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12598+ =/ scanned=(unit dgscan)
12599+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12601+ =. next.initial (dg-next-id ids.u.scanned 0)
12602+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program initial)
12603+ ?. ?=(%fn -.typ.instance) ~
12604+ ?. ?=(%cell -.sample.typ.instance) ~
12605+ =/ expected-init=(unit itype)
12606+ (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written-sample))
12607+ ?~ expected-init ~
12608+ ?. ?=(%fn -.u.expected-init) ~
12609+ ?. ?=(%var -.sample.u.expected-init) ~
12610+ =/ data=@ud id.sample.u.expected-init
12611+ =/ init-var=itype [%var next.state.instance]
12612+ =/ st=istate state.instance(next +(next.state.instance))
12613+ =/ up=[typ=itype state=istate] (instantiate-scheme u.update st)
12614+ =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
12615+ =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
12616+ =. st state.sb(gate-defs checked, head-evidence heads)
12617+ =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
12619+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.st next.st)
12620+ ?. ?=(%ok -.fit) ~
12621+ =/ actual-final=itype (itype-normalize actual sub.fit)
12622+ =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
12623+ =/ open=(list @ud)
12624+ (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
12625+ ?. (levy open |=(n=@ud =(data n))) ~
12626+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
12628+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.fit next.fit)
12629+ ?. ?=(%ok -.replay) ~
12630+ ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
12631+ =/ expected=itype (itype-normalize u.expected-init sub.fit)
12632+ ?. ?=(%fn -.expected) ~
12633+ =. st st(sub sub.fit, next next.fit)
12634+ =/ init-state=istate (reserve-def-caps val.init-def st)
12635+ =/ inferred=iresult (infer-fragment val.init-def env init-state)
12636+ =? inferred ?=(%| -.inferred) (infer-recursive-gate init-def env init-state)
12637+ ?: ?=(%| -.inferred) ~
12638+ ?. ?=(%fn -.typ.p.inferred) ~
12640+ (itype-fit sample.typ.p.inferred sample.expected sub.state.p.inferred next.state.p.inferred)
12641+ ?. ?=(%ok -.data-fit) ~
12642+ =/ closed=itype (itype-normalize expected sub.data-fit)
12643+ ?. ?=(%fn -.closed) ~
12644+ :: Resolve the ordinary tuple cast first, then check the complete gate.
12645+ :: General function fit remains unchanged; only this recovered candidate
12646+ :: receives the derived result context before its whole-type cast fit.
12647+ =/ product-fit=ifit
12648+ (itype-fit product.typ.p.inferred product.closed sub.data-fit next.data-fit)
12649+ ?. ?=(%ok -.product-fit) ~
12651+ (itype-merge-faces product.typ.p.inferred product.closed sub.product-fit)
12652+ =/ actual-cast=itype [%fn sample.typ.p.inferred product]
12654+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
12655+ ?. ?=(%ok -.cast) ~
12656+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
12657+ =/ adjusted=iresult
12658+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
12659+ =/ added=(unit iadded-definition)
12660+ (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
12662+ =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
12664+ ?. ?=(~ vars.u.recovered) ~
12665+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
12666+ =/ completed=[env=ienv artifacts=(list iwidth-definition)]
12667+ (add-supported-defs-core ~[main] ds checked.u.added heads env.u.added molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.u.added grec-index.initial)
12668+ ?~ (ienv-lookup %main env.completed) ~
12669+ `[env.completed grouped.resolution artifacts.completed]
12513++ program-main-closed
12671++ program-main-closed
12514 |= [parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv prelude=(unit ifile)]
12672 |= [parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv prelude=(unit ifile)]
@@ -12627,6 +12785,13 @@
12627 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12785 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12628 (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
12786 (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
12629 =/ env=ienv env.resolution
12787 =/ env=ienv env.resolution
12788+ =/ recovered=(unit iresolved)
12791+ (program-init-context u.main u.main-parts defs.mod resolution state)
12792+ =. env ?~(recovered env env.u.recovered)
12793+ =. artifacts.resolution
12794+ ?~(recovered artifacts.resolution artifacts.u.recovered)
12631 ?: (module-values-complete defs.mod env) env
12796 ?: (module-values-complete defs.mod env) env
12632 ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
12797 ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env