@@ -11006,7 +11006,14 @@
11006+$ jbundle (list jsource)
11006+$ jbundle (list jsource)
11007+$ jcache (list [at=path iface=ifile])
11007+$ jcache (list [at=path iface=ifile])
11008+$ jfile-result (each [iface=ifile cache=jcache] @t)
11008+$ 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)
11009+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11014+$ 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)
11011:: Written record fields each have their own lexical record scope.
11018:: Written record fields each have their own lexical record scope.
11012+$ written-fields (map term span)
11019+$ written-fields (map term span)
@@ -11279,6 +11286,43 @@
11279 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
11286 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
11280 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
11287 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
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]
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]
11303+ =/ sh=shape body.m
11305+ ?. ?=(%generic -.sh) &
11307+ (module-mold-params-valid vars.sh *(set @t) 256)
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)
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 &))
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]]
11282++ module-mold-types
11326++ module-mold-types
11283 |= [molds=imolds state=istate]
11327 |= [molds=imolds state=istate]
11284 ^- (each imold-types @t)
11328 ^- (each imold-types @t)
@@ -11627,33 +11671,40 @@
11627++ resolve-jibb-imports
11671++ resolve-jibb-imports
11628 |= [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)]
11672 |= [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)]
11629 ^- jimports-result
11673 ^- 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]
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
11630 ?~ imports [%& [~ cache]]
11681 ?~ imports [%& [~ cache]]
11631 ?. ?=(%jibb -.i.imports) $(imports t.imports)
11682 ?. ?=(%jibb -.i.imports) $(imports t.imports)
11632 =/ at=path (weld path.i.imports `path`~[%jibb])
11683 =/ at=path (weld path.i.imports `path`~[%jibb])
11633 ?: =(at /lib/jibb/internal/jibb)
11684 ?: =(at /lib/jibb/internal/jibb)
11634− [%| 'the prelude internal module is private']
11685+ [%| ['the prelude internal module is private' ~]]
11635 ?: =(at /lib/jibb/primitives/jibb)
11686 ?: =(at /lib/jibb/primitives/jibb)
11636− [%| 'the prelude primitive interface is private']
11687+ [%| ['the prelude primitive interface is private' ~]]
11637 ?: (lien active |=(p=path =(p at)))
11688 ?: (lien active |=(p=path =(p at)))
11638− [%| (crip "import cycle at {(spud at)}")]
11689+ [%| [(crip "import cycle at {(spud at)}") ~]]
11639 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11690 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11640− ?~ found [%| (crip "module source missing: {(spud at)}")]
11691+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11641− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11692+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
11642 =/ cached=(unit ifile) (find-jibb-cache at cache)
11693 =/ cached=(unit ifile) (find-jibb-cache at cache)
11643− =/ iface=jfile-result
11694+ =/ iface=jfile-detailed-result
11644 ?^ cached
11695 ?^ cached
11645− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11696+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
11646 ?~ graph.u.cached
11697 ?~ graph.u.cached
11647 :: A detached legacy interface has unknown evidence. Rebuild it
11698 :: A detached legacy interface has unknown evidence. Rebuild it
11648 :: against the current graph, without retaining any stale entry.
11699 :: against the current graph, without retaining any stale entry.
11649 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
11700 =/ 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)
11651 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
11702 ?. (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' ~]]
11653 [%& [u.cached cache]]
11704 [%& [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)
11655 ?: ?=(%| -.iface) [%| p.iface]
11706 ?: ?=(%| -.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)
11657 ?: ?=(%| -.rest) rest
11708 ?: ?=(%| -.rest) rest
11658 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
11709 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
@@ -12390,17 +12441,25 @@
12390++ infer-jibb-file
12441++ infer-jibb-file
12391 |= [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)]
12442 |= [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)]
12392 ^- jfile-result
12443 ^- 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]
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
12393 =/ parsed (parse at src)
12452 =/ parsed (parse at src)
12394− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
12453+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
12395 =/ mod=module p.parsed
12454 =/ mod=module p.parsed
12396 =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
12455 =/ 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) ~]]
12398 ?: ?=([%ui %api *] at)
12457 ?: ?=([%ui %api *] at)
12399 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
12458 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
12400 ?^ iface
12459 ?^ iface
12401 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
12460 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
12402 [%& [checked [[at checked] cache]]]
12461 [%& [checked [[at checked] cache]]]
12403− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
12462+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
12404 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
12463 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
12405 =/ narrow=?
12464 =/ narrow=?
12406 ?. ?=([[%mark *] ~] imports.mod) |
12465 ?. ?=([[%mark *] ~] imports.mod) |
@@ -12410,21 +12469,21 @@
12410 ?: narrow
12469 ?: narrow
12411 =/ request=(each ione-request-interface @t)
12470 =/ request=(each ione-request-interface @t)
12412 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
12471 (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)}") ~]]
12414 =/ checked=ifile iface.p.request
12473 =/ checked=ifile iface.p.request
12415 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
12474 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
12416 =/ multi=(each [iface=ifile cache=jcache] @t)
12475 =/ multi=(each [iface=ifile cache=jcache] @t)
12417 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
12476 (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)}") ~]]
12419 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
12478 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
12420 ?. (module-scope-valid mod prelude-values prelude-molds)
12479 ?. (module-scope-valid mod prelude-values prelude-molds)
12421 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12480 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12422− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
12481+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
12423− [%| (crip "module has conflicting names: {(spud at)}")]
12482+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
12424 =/ vals=(list term) (global-value-names defs.mod)
12483 =/ vals=(list term) (global-value-names defs.mod)
12425 ?: (lien vals |=(n=term =(n %main)))
12484 ?: (lien vals |=(n=term =(n %main)))
12426− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
12485+ [%| [(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)
12486+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
12428 ?: ?=(%| -.js) [%| p.js]
12487 ?: ?=(%| -.js) [%| p.js]
12429 =/ collected=grec-collected
12488 =/ collected=grec-collected
12430 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
12489 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
@@ -12449,8 +12508,14 @@
12449 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
12508 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
12450 `[at src u.prelude index]
12509 `[at src u.prelude index]
12451 =. grec-index.state index
12510 =. grec-index.state index
12452− =/ mts=(each imold-types @t) (module-mold-types molds state)
12511+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
12453− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
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]]]
12454 =/ resolution=iresolved
12519 =/ resolution=iresolved
12455 ?~ index
12520 ?~ index
12456 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12521 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
@@ -12467,10 +12532,10 @@
12467 ?: (dg-interface-safe env.u.transaction) env.u.transaction
12532 ?: (dg-interface-safe env.u.transaction) env.u.transaction
12469 ?. (module-values-complete defs.mod env)
12534 ?. (module-values-complete defs.mod env)
12470− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
12535+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
12471 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
12536 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
12472 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
12537 =/ 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' ~]]
12474 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
12539 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
12475 [%& [iface [[at iface] cache.p.js]]]
12540 [%& [iface [[at iface] cache.p.js]]]