Iter 5b: Cross-Module-Typcheck mit qualifizierten Verweisen
Neue API check_workspace(&Workspace) -> Vec<Diagnostic>; check_module hebt das Modul intern in einen Trivial-Workspace. Term::Var mit genau einem Punkt im Namen ist ein qualifizierter Verweis <prefix>.<def>, aufgelöst über Import-Map (alias-oder-modulname → echter Modulname). Drei neue Diagnostic-Codes: unknown-module, unknown-import, invalid-def-name. ail check lädt jetzt immer via load_workspace; Loader-Fehler werden im JSON-Modus zu strukturierten Diagnostics (module-not-found, module-cycle, …). DESIGN.md und JOURNAL.md dokumentieren die Konvention. Hash-Stabilität: alle ir_snapshot_*- Tests bitidentisch grün, kein neuer AST-Knoten.
This commit is contained in:
@@ -100,6 +100,25 @@ Begründung:
|
||||
Trade-off: keine Inline-Optimierungen über die LLVM-API. Wir setzen auf
|
||||
`clang -O2` als Standard-Pipeline.
|
||||
|
||||
## Konvention: Qualifizierte Cross-Module-Verweise (Iter 5b)
|
||||
|
||||
Cross-Module-Aufrufe nutzen **keinen** neuen AST-Knoten. Stattdessen ist ein
|
||||
`Term::Var { name }` mit genau einem Punkt im Namen ein qualifizierter
|
||||
Verweis: `<prefix>.<def>`.
|
||||
|
||||
- `<prefix>` ist ein Import-Alias (`import { module: "X", as: "<prefix>" }`)
|
||||
oder, falls ohne Alias importiert, der Modulname selbst.
|
||||
- `<def>` ist der Name einer Top-Level-Definition im Zielmodul.
|
||||
- Def-Namen DÜRFEN keinen Punkt enthalten — der Typchecker meldet
|
||||
`invalid-def-name` mit `ctx: { "reason": "contains-dot" }`.
|
||||
- Der Workspace-Loader (Iter 5a) findet alle erreichbaren Module; der
|
||||
Typchecker (Iter 5b, `check_workspace`) löst Punkt-Namen über die
|
||||
Import-Map auf. Diagnostic-Codes: `unknown-module` (Prefix nicht
|
||||
importiert), `unknown-import` (Modul gefunden, Def nicht).
|
||||
|
||||
Hash-Stabilität: kein neuer AST-Knoten, keine umbenannten Felder — alle
|
||||
bisherigen Modul-Hashes bleiben bitidentisch.
|
||||
|
||||
## Datenmodell (MVP)
|
||||
|
||||
### Module
|
||||
|
||||
Reference in New Issue
Block a user