@@ -11006,7 +11006,14 @@
1100611006+$ jbundle (list jsource)
1100711007+$ jcache (list [at=path iface=ifile])
1100811008+$ jfile-result (each [iface=ifile cache=jcache] @t)
11009+:: Overlap evidence retains the exact source that supplied its spans.
11010+:: Ordinary Jibb imports preserve this evidence through the resolver.
11011++$ jfile-overlap [file=path source=@t name=term cases=upair]
11012++$ jfile-failure [message=@t overlap=(unit jfile-overlap)]
11013++$ jfile-detailed-result (each [iface=ifile cache=jcache] jfile-failure)
1100911014+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11015+:: Preserve an imported overlap's original file and source across the graph.
11016++$ jimports-detailed-result (each [resolved=ijimports cache=jcache] jfile-failure)
1101011017::
1101111018:: Written record fields each have their own lexical record scope.
1101211019+$ written-fields (map term span)
@@ -11279,6 +11286,43 @@
1127911286 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
1128011287 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
1128111288::
11289+:: A detailed failure is attached only to the first mold that actually
11290+:: failed in this check, using that module's checked source mold table.
11291++$ imold-failure [message=@t overlap=(unit [name=term cases=upair])]
11292+:: Validate a generic wrapper without an unbounded duplicate-name pass.
11293+++ module-mold-params-valid
11294+ |= [vars=(list @t) seen=(set @t) fuel=@ud]
11295+ ^- ?
11296+ ?~ vars &
11297+ ?: =(0 fuel) |
11298+ ?: (~(has in:..zuse seen) i.vars) |
11299+ $(vars t.vars, seen (~(put in:..zuse seen) i.vars), fuel (dec fuel))
11300+++ module-mold-overlap
11301+ |= [m=[name=term body=shape] molds=imolds]
11302+ ^- (unit upair)
11303+ =/ sh=shape body.m
11304+ =/ valid=?
11305+ ?. ?=(%generic -.sh) &
11306+ ?~ vars.sh |
11307+ (module-mold-params-valid vars.sh *(set @t) 256)
11308+ ?. valid ~
11309+ =? sh ?=(%generic -.sh) body.sh
11310+ ?. ?=(%union -.sh) ~
11311+ (union-source-overlap cases.sh molds 256)
11312+++ module-mold-types-detail
11313+ |= [molds=imolds state=istate]
11314+ ^- (each imold-types imold-failure)
11315+ ?~ molds [%& ~]
11316+ =/ m=[name=term body=shape] i.molds
11317+ =/ t=(unit [template=ischeme state=istate])
11318+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
11319+ ?~ t
11320+ =/ overlap=(unit upair) (module-mold-overlap m molds.state)
11321+ [%| ['module mold needs unsupported inference' ?~(overlap ~ `[name.m u.overlap])]]
11322+ =. typ.template.u.t (label-direct-union typ.template.u.t body.m name.m state)
11323+ =/ rest=(each imold-types imold-failure) $(molds t.molds)
11324+ ?: ?=(%| -.rest) rest
11325+ [%& [[name.m template.u.t] p.rest]]
1128211326++ module-mold-types
1128311327 |= [molds=imolds state=istate]
1128411328 ^- (each imold-types @t)
@@ -11627,33 +11671,40 @@
1162711671++ resolve-jibb-imports
1162811672 |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
1162911673 ^- jimports-result
11674+ =/ result=jimports-detailed-result
11675+ (resolve-jibb-imports-detailed imports externals mark-externals modules active prelude-values prelude-molds cache prelude)
11676+ ?: ?=(%| -.result) [%| message.p.result]
11677+ [%& p.result]
11678+++ resolve-jibb-imports-detailed
11679+ |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
11680+ ^- jimports-detailed-result
1163011681 ?~ imports [%& [~ cache]]
1163111682 ?. ?=(%jibb -.i.imports) $(imports t.imports)
1163211683 =/ at=path (weld path.i.imports `path`~[%jibb])
1163311684 ?: =(at /lib/jibb/internal/jibb)
11634− [%| 'the prelude internal module is private']
11685+ [%| ['the prelude internal module is private' ~]]
1163511686 ?: =(at /lib/jibb/primitives/jibb)
11636− [%| 'the prelude primitive interface is private']
11687+ [%| ['the prelude primitive interface is private' ~]]
1163711688 ?: (lien active |=(p=path =(p at)))
11638− [%| (crip "import cycle at {(spud at)}")]
11689+ [%| [(crip "import cycle at {(spud at)}") ~]]
1163911690 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11640− ?~ found [%| (crip "module source missing: {(spud at)}")]
11641− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11691+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11692+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
1164211693 =/ cached=(unit ifile) (find-jibb-cache at cache)
11643− =/ iface=jfile-result
11694+ =/ iface=jfile-detailed-result
1164411695 ?^ cached
11645− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11696+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
1164611697 ?~ graph.u.cached
1164711698 :: A detached legacy interface has unknown evidence. Rebuild it
1164811699 :: against the current graph, without retaining any stale entry.
1164911700 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
11650− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
11701+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
1165111702 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
11652− [%| 'cached module evidence needs unsupported inference']
11703+ [%| ['cached module evidence needs unsupported inference' ~]]
1165311704 [%& [u.cached cache]]
11654− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
11705+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
1165511706 ?: ?=(%| -.iface) [%| p.iface]
11656− =/ rest=jimports-result $(imports t.imports, cache cache.p.iface)
11707+ =/ rest=jimports-detailed-result $(imports t.imports, cache cache.p.iface)
1165711708 ?: ?=(%| -.rest) rest
1165811709 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
1165911710::
@@ -12390,17 +12441,25 @@
1239012441++ infer-jibb-file
1239112442 |= [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)]
1239212443 ^- jfile-result
12444+ =/ out=jfile-detailed-result
12445+ (infer-jibb-file-detailed at src externals mark-externals modules active prelude-values prelude-molds cache prelude)
12446+ ?: ?=(%| -.out) [%| message.p.out]
12447+ [%& p.out]
12448+:: Returns structured root-source overlap evidence after the same full check.
12449+++ infer-jibb-file-detailed
12450+ |= [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)]
12451+ ^- jfile-detailed-result
1239312452 =/ parsed (parse at src)
12394− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
12453+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
1239512454 =/ mod=module p.parsed
1239612455 =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
12397− ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
12456+ ?^ duplicate [%| [(show-duplicate-fields at src u.duplicate) ~]]
1239812457 ?: ?=([%ui %api *] at)
1239912458 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
1240012459 ?^ iface
1240112460 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
1240212461 [%& [checked [[at checked] cache]]]
12403− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
12462+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1240412463 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
1240512464 =/ narrow=?
1240612465 ?. ?=([[%mark *] ~] imports.mod) |
@@ -12410,21 +12469,21 @@
1241012469 ?: narrow
1241112470 =/ request=(each ione-request-interface @t)
1241212471 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
12413− ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12472+ ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1241412473 =/ checked=ifile iface.p.request
1241512474 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
1241612475 =/ multi=(each [iface=ifile cache=jcache] @t)
1241712476 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
12418− ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12477+ ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1241912478 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1242012479 ?. (module-scope-valid mod prelude-values prelude-molds)
1242112480 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12422− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
12423− [%| (crip "module has conflicting names: {(spud at)}")]
12481+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
12482+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
1242412483 =/ vals=(list term) (global-value-names defs.mod)
1242512484 ?: (lien vals |=(n=term =(n %main)))
12426− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
12427− =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
12485+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
12486+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
1242812487 ?: ?=(%| -.js) [%| p.js]
1242912488 =/ collected=grec-collected
1243012489 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
@@ -12449,8 +12508,14 @@
1244912508 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
1245012509 `[at src u.prelude index]
1245112510 =. grec-index.state index
12452− =/ mts=(each imold-types @t) (module-mold-types molds state)
12453− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
12511+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
12512+ ?: ?=(%| -.mts)
12513+ ?~ overlap.p.mts [%| [(crip "{(trip message.p.mts)}: {(spud at)}") ~]]
12514+ =/ witness=[name=term cases=upair] u.overlap.p.mts
12515+ =/ first=@t (show-error src [at line.beg.first.cases.witness col.beg.first.cases.witness "first union case"])
12516+ =/ second=@t (show-error src [at line.beg.second.cases.witness col.beg.second.cases.witness "overlapping case"])
12517+ =/ msg=@t (of-wain:format ~[(crip "module mold {(trip name.witness)} has overlapping cases") first second])
12518+ [%| [msg `[at src name.witness cases.witness]]]
1245412519 =/ resolution=iresolved
1245512520 ?~ index
1245612521 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
@@ -12467,10 +12532,10 @@
1246712532 ?: (dg-interface-safe env.u.transaction) env.u.transaction
1246812533 env
1246912534 ?. (module-values-complete defs.mod env)
12470− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
12535+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
1247112536 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
1247212537 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
12473− ?~ graph [%| 'module request evidence needs unsupported inference']
12538+ ?~ graph [%| ['module request evidence needs unsupported inference' ~]]
1247412539 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
1247512540 [%& [iface [[at iface] cache.p.js]]]
1247612541::