@@ -8435,7 +8435,10 @@
8435 =/ traced=iresult $(e val.e)
8435 =/ traced=iresult $(e val.e)
8436 ?: ?=(%| -.traced) traced
8436 ?: ?=(%| -.traced) traced
8437 $(e then.e, state state.p.traced)
8437 $(e then.e, state state.p.traced)
8439+ ?: &(?=(^ defer.state) ?=(^ prelude.state))
8440+ (dg-infer-tuple-items items.e env state)
8438− %tuple (infer-simple-items items.e env state)
8441+ (infer-simple-items items.e env state)
8440 ?~ defs.e $(e final.e)
8443 ?~ defs.e $(e final.e)
8441 =/ local-names=(list term) (global-value-names defs.e)
8444 =/ local-names=(list term) (global-value-names defs.e)
@@ -9241,6 +9244,8 @@
9241 |= [e=expr expected=itype env=ienv state=istate context=span]
9244 |= [e=expr expected=itype env=ienv state=istate context=span]
9242 ^- iresult
9245 ^- iresult
9243 ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9246 ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9247+ ?: &(?=(^ defer.state) ?=(^ prelude.state) ?=(%tuple -.e))
9248+ (infer-fragment e env state)
9244 ?: ?=(%pair -.e) $(e (pair-as-cell e))
9249 ?: ?=(%pair -.e) $(e (pair-as-cell e))
9245 ?: ?=(%group -.e) $(e inner.e)
9250 ?: ?=(%group -.e) $(e inner.e)
9246 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
9251 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
@@ -12658,7 +12663,7 @@
12658 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
12663 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
12659 =/ scope-values=(list term)
12664 =/ scope-values=(list term)
12660 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
12665 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
12661− (golden-types-in-context file src externals mark-externals resolved.p.js scope-values prelude-molds iface)
12666+ (golden-types-in-context-core file src externals mark-externals resolved.p.js scope-values prelude-molds iface prepared)
12663:: +golden-types-with-marks: supply declared mark types separately from /sur
12668:: +golden-types-with-marks: supply declared mark types separately from /sur
12664:: entries, as [mark result] with the result from +read-mark:jibb-import.
12669:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -12689,6 +12694,10 @@
12689++ golden-types-in-context
12694++ golden-types-in-context
12690 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
12695 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
12697+ (golden-types-in-context-core file src externals mark-externals jimports prelude-values reserved-molds prelude ~)
12698+++ golden-types-in-context-core
12699+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile) prepared=(unit iprelude)]
12692 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
12701 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
12693 =/ parsed (parse file src)
12702 =/ parsed (parse file src)
12694 ?: ?=(%| -.parsed) (show-error src p.parsed)
12703 ?: ?=(%| -.parsed) (show-error src p.parsed)
@@ -12708,19 +12717,27 @@
12708 =/ eligible=?
12717 =/ eligible=?
12709 ?& ?=(~ imports.p.parsed)
12718 ?& ?=(~ imports.p.parsed)
12710 ?=(~ jimports)
12719 ?=(~ jimports)
12712− ?=(~ prelude-values)
12713− ?=(~ reserved-molds)
12714 !?=([%ui %api *] file)
12720 !?=([%ui %api *] file)
12715 !?=([%ui %stores *] file)
12721 !?=([%ui %stores *] file)
12716 !(lien (global-value-names ds) |=(n=term =(n %main)))
12722 !(lien (global-value-names ds) |=(n=term =(n %main)))
12717− (module-scope-valid p.parsed ~ ~)
12718 !(module-values-complete ds env)
12723 !(module-values-complete ds env)
12719 (lte (met 3 src) 65.536)
12724 (lte (met 3 src) 65.536)
12720 (lte (lent ds) 64)
12725 (lte (lent ds) 64)
12721− (dg-source-candidate ds 64)
12726+ ?| &(?=(~ prepared) ?=(~ prelude) ?=(~ prelude-values) ?=(~ reserved-molds) (module-scope-valid p.parsed ~ ~) (dg-source-candidate ds 64))
12729+ =(u.prelude iface.u.prepared)
12730+ =(prelude-values values.u.prepared)
12731+ =(reserved-molds molds.u.prepared)
12732+ (module-scope-valid p.parsed values.u.prepared molds.u.prepared)
12733+ (dg-prepared-candidate ds 64)
12723− =/ transaction=(unit dgcommit) ?:(eligible (dg-root-source file src) ~)
12737+ =/ transaction=(unit dgcommit)
12739+ ?~ prepared (dg-root-source file src)
12740+ (dg-root-prepared file src u.prepared)
12724 =. recovered
12741 =. recovered
12725 ?~ transaction ~
12742 ?~ transaction ~
12726 ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
12743 ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
@@ -13006,6 +13023,31 @@
13006 [%& result st(next +(next.st), obligations [ex ey obligations.st])]
13023 [%& result st(next +(next.st), obligations [ex ey obligations.st])]
13007 [%& typ.p.left state.p.right]
13024 [%& typ.p.left state.p.right]
13026+:: A direct tuple literal may wait for a later exact result context.
13027+:: Each pending literal retains its source tag and its own fit obligation.
13028+++ dg-infer-tuple-items
13029+ |= [items=(list item) env=ienv state=istate]
13031+ ?~ items [%| ["empty cell is not supported by partial inference" ~]]
13032+ =/ head=iresult (infer-fragment val.i.items env state)
13033+ ?: ?=(%| -.head) head
13034+ =/ typ=itype typ.p.head
13035+ =/ st=istate state.p.head
13036+ =/ adjusted=(unit [typ=itype state=istate])
13037+ ?. (dg-owned-arm-literal val.i.items typ tags.st sub.st next.state) `[typ st]
13038+ ?: (gth (lent obligations.st) 63) ~
13039+ =/ pending=itype [%var next.st]
13040+ =/ edge=dgo [typ pending (span-of val.i.items) at.i.items]
13041+ `[pending st(next +(next.st), obligations [edge obligations.st])]
13042+ ?~ adjusted [%| ["deferred tuple context needs unsupported inference" ~]]
13043+ =. typ typ.u.adjusted
13044+ =. st state.u.adjusted
13045+ =. typ ?~(face.i.items typ [%face u.face.i.items typ])
13046+ ?~ t.items [%& typ st]
13047+ =/ tail=iresult $(items t.items, state st)
13048+ ?: ?=(%| -.tail) tail
13049+ [%& [%cell typ typ.p.tail] state.p.tail]
13009:: Deferred inference uses only source forms whose successful fit sites are
13051:: Deferred inference uses only source forms whose successful fit sites are
13010:: guarded below; a shared source-node budget bounds this screen.
13052:: guarded below; a shared source-node budget bounds this screen.
13011++ dg-safe-expressions
13053++ dg-safe-expressions
@@ -13015,6 +13057,13 @@
13015 =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
13057 =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
13016 ?~ first ~
13058 ?~ first ~
13017 $(todo t.todo, fuel u.first)
13059 $(todo t.todo, fuel u.first)
13061+ |= [items=(list item) fuel=@ud]
13064+ =/ first=(unit @ud) (dg-safe-expression val.i.items fuel)
13066+ $(items t.items, fuel u.first)
13018++ dg-safe-expression
13067++ dg-safe-expression
13019 |= [e=expr fuel=@ud]
13068 |= [e=expr fuel=@ud]
13020 ^- (unit @ud)
13069 ^- (unit @ud)
@@ -13032,6 +13081,7 @@
13032 $(e final.e, fuel fuel)
13081 $(e final.e, fuel fuel)
13033 %gate $(e body.e, fuel fuel)
13082 %gate $(e body.e, fuel fuel)
13034 %gate-wide $(e body.e, fuel fuel)
13083 %gate-wide $(e body.e, fuel fuel)
13084+ %tuple (dg-safe-items items.e fuel)
13035 %branch
13085 %branch
13036 ?. (dg-boolean-patterns e) ~
13086 ?. (dg-boolean-patterns e) ~
13037 ?> ?=(^ arms.e)
13087 ?> ?=(^ arms.e)
@@ -13171,6 +13221,28 @@
13171 ?: (dg-direct-source val.i.ds 64) &
13221 ?: (dg-direct-source val.i.ds 64) &
13172 $(ds t.ds, fuel (dec fuel))
13222 $(ds t.ds, fuel (dec fuel))
13224+++ dg-prepared-source
13225+ |= [e=expr fuel=@ud]
13227+ ?: (dg-direct-source e fuel) &
13230+ %group $(e inner.e, fuel (dec fuel))
13231+ %gate $(e body.e, fuel (dec fuel))
13232+ %gate-wide $(e body.e, fuel (dec fuel))
13233+ %cast $(e val.e, fuel (dec fuel))
13234+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
13237+++ dg-prepared-candidate
13238+ |= [ds=(list def) fuel=@ud]
13242+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
13243+ ?: (dg-prepared-source val.i.ds 64) &
13244+ $(ds t.ds, fuel (dec fuel))
13174++ dg-interface-safe
13246++ dg-interface-safe
13175 |= [env=ienv]
13247 |= [env=ienv]
@@ -13216,6 +13288,47 @@
13216 (dg-stage defs base base st ~ 64)
13288 (dg-stage defs base base st ~ 64)
13218 [& (transact)]
13290 [& (transact)]
13291+:: The caller supplies the trusted prepared prelude. This transaction is
13292+:: only report evidence; the ordinary module resolver does not publish it.
13293+++ dg-root-prepared
13294+ |= [at=path src=@t prepared=iprelude]
13295+ ^- (unit dgcommit)
13296+ ?: ?=([%ui %api *] at) ~
13297+ ?: ?=([%ui %stores *] at) ~
13298+ ?: (gth (met 3 src) 65.536) ~
13299+ =/ parsed (parse at src)
13300+ ?: ?=(%| -.parsed) ~
13301+ ?^ imports.p.parsed ~
13302+ ?. (module-scope-valid p.parsed values.prepared molds.prepared) ~
13303+ ?^ (duplicate-defs defs.p.parsed) ~
13304+ =/ defs=(list def) defs.p.parsed
13305+ ?: (gth (lent defs) 64) ~
13306+ ?: (lien (global-value-names defs) |=(n=term =(n %main))) ~
13307+ ?. (dg-prepared-candidate defs 64) ~
13308+ =/ local-molds=imolds (collect-simple-molds defs)
13309+ =/ globals=(list term) (weld values.prepared (global-value-names defs))
13310+ =/ iface=ifile iface.prepared
13311+ =/ prelude=(unit ifile) `iface
13312+ =/ resolution=iresolved
13313+ (resolve-groups defs local-molds globals ~ ~ ~ ~ ~ molds.prepared at prelude)
13314+ ?^ grouped.resolution ~
13315+ ?^ artifacts.resolution ~
13316+ =/ base=ienv env.resolution
13318+ (turn molds.iface |=(x=[name=term template=ischeme] [name.x template.x]))
13319+ =/ all-env=ienv (weld base (weld values.iface templates))
13320+ =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
13323+ =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
13325+ =/ fresh=@ud (dg-next-id ids.u.all 0)
13326+ =/ st=istate *istate
13327+ =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
13328+ =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
13329+ ?: ?=(%| -.checked-molds) ~
13330+ (dg-stage defs base base st ~ 64)
13219++ dg-all-env-ids
13332++ dg-all-env-ids
13220 |= [env=ienv fuel=@ud ids=(list @ud)]
13333 |= [env=ienv fuel=@ud ids=(list @ud)]
13221 ^- (unit dgscan)
13334 ^- (unit dgscan)