38dddc234c5c2dd5fc85625772f5871c3a320bc8
The driver handled one file. It now loads the graph rooted at the entry file and checks every unit in it. The import root is derived rather than configured: a unit named `a.b` read from `<root>/a/b.fe` fixes `<root>`, so a sibling `import c.d;` is looked for at `<root>/c/d.fe`. That is enough for the fixtures and for any tree that follows 8.1, and it means there is no path flag to get wrong yet. Loading is depth-first with the chain of units currently open kept on a stack, so meeting one again is a cycle rather than a revisit -- a unit reached twice by different paths is loaded once. Cycles, imports with no source file, and two imports claiming the same binding are all reported. One thing this exposed: FeDiags held a single source buffer, so once a build spanned several files every excerpt was drawn from whichever file was parsed last. `cycle/b.fe:3` printed the text of a.fe. fe_diags_source switches it, and loading and checking both set it per unit. The cycle fixtures lost their line markers on purpose. Which import closes the cycle depends on which file you enter from -- entering at a.fe reports b.fe, entering at b.fe reports a.fe -- so pinning a line would pin an arbitrary half of a symmetric pair. The message is pinned; the line is not. units: missing, bindconf and cycle pass, on top of the identity cases. 146 -> 148 of 188. What is left in units/ needs cross-unit name resolution and visibility: an importer still cannot see `util.answer`.
Description
doslang mirror
914 KiB
Languages
C
94.2%
Python
3%
Assembly
2%
JavaScript
0.6%