docs(ffi-linkage): checkpoint — Phase 9.1+9.2 IDENTIFIER purge COMPLETE; comment/doc/issues text purge remains
This commit is contained in:
@@ -5,7 +5,28 @@ Companion to `current/PLAN-EXTERN-EXPORT.md` — one merged plan: **Part A** add
|
|||||||
every commit, one step at a time per the cadence rule.
|
every commit, one step at a time per the cadence rule.
|
||||||
|
|
||||||
## Last completed step
|
## Last completed step
|
||||||
**Phase 9.1 (partial) — internal linkage-identifier purge** (commits `b838f63` 9.1a,
|
**Phase 9.1 + 9.2 — internal IDENTIFIER purge COMPLETE** (commits 9.1a `b838f63`,
|
||||||
|
9.1b `b78e7dd`, 9.1c `cd14794`, 9.1d `7ffdc7d`, 9.2a `3354446`, 9.2b `5c8af6e`,
|
||||||
|
9.2b-fix `a15a868`, 9.2c `d27be42`, 9.2d `8cca3b9`). **Every `foreign` IDENTIFIER in
|
||||||
|
`src/` is renamed** — the only `foreign` left in `src/` is COMMENTS + the kept token
|
||||||
|
(`hash_foreign` + its `#foreignx` lexer-boundary test) + the rejection-message string.
|
||||||
|
Suite green (646/444) at every commit.
|
||||||
|
- **9.1d** eliminated the `foreign_expr` AST node: migrated `c_import.zig` auto-synth
|
||||||
|
to the extern shape, deleted the node + `ForeignExpr` + all readers.
|
||||||
|
- **9.2a/b/c/d** ran the runtime-class family rename (Decision 5 → `Runtime*`):
|
||||||
|
types `ForeignClassDecl`→`RuntimeClassDecl` etc.; fns `parseForeignClassDecl`→
|
||||||
|
`parseRuntimeClassDecl`, `lowerForeignMethodCall`→`lowerRuntimeMethodCall`, …; state
|
||||||
|
`foreign_class_map`→`runtime_class_map`, `foreign_class_decl` variant→
|
||||||
|
`runtime_class_decl`; the extern-ref validators → `Extern` (linkage, `checkExternRefs`);
|
||||||
|
the reference flag → **`is_extern`** (per user: reuse existing terminology, not a new
|
||||||
|
`is_reference`); and `foreign_path`→`runtime_path` COUPLED across the hook boundary
|
||||||
|
(build.sx accessor `jni_main_runtime_path_at` + the registered hook string +
|
||||||
|
bundle.sx + specs.md), with 37 `.ir` snapshots regenerated for the renamed
|
||||||
|
`@BuildOptions.jni_main_runtime_path_at` declare stub (symbol-name change only).
|
||||||
|
- **9.1a/b/c** (linkage): 5 collision-free renames (callExtern, …); "foreign symbol"
|
||||||
|
diagnostic + panic → "extern symbol" (1172 regen); deleted dead VarDecl legacy fields.
|
||||||
|
|
||||||
|
### Prior: Phase 9.1 (partial) — internal linkage-identifier purge (commits `b838f63` 9.1a,
|
||||||
`b78e7dd` 9.1b, `cd14794` 9.1c). **PHASE 9 STARTED.** Decision 6 = PURGE EVERYTHING,
|
`b78e7dd` 9.1b, `cd14794` 9.1c). **PHASE 9 STARTED.** Decision 6 = PURGE EVERYTHING,
|
||||||
scoped (user, 2026-06-15): purge `foreign` from **all `.sx` files + all documentation +
|
scoped (user, 2026-06-15): purge `foreign` from **all `.sx` files + all documentation +
|
||||||
all our Zig (`src/`)**, analyzing each grep hit — **legitimate keeps stay**
|
all our Zig (`src/`)**, analyzing each grep hit — **legitimate keeps stay**
|
||||||
@@ -288,7 +309,34 @@ AOT), 1227 (export fn rename, AOT), 1348 (objc extern class), 1349 (objc export
|
|||||||
(jni extern class), 1174/1175 (interplay diagnostics).
|
(jni extern class), 1174/1175 (interplay diagnostics).
|
||||||
|
|
||||||
## Next step
|
## Next step
|
||||||
**PART B — finish Phase 9 (the scoped `foreign` purge).** Phases 5–8 + 9.1a/b/c COMPLETE.
|
**PART B — finish Phase 9: the COMMENT / DOC / issues text purge** (all `src/`
|
||||||
|
identifiers + the AST node are already done; remaining is prose). Lower-risk than the
|
||||||
|
renames (text only, mostly snapshot-neutral) but needs per-instance reading — NOT a
|
||||||
|
blind sed. Footprint: `src/` ~205 (all comments now), `examples/*.sx` ~100 comments,
|
||||||
|
`issues/*.md` ~20 files, docs (specs/readme/CLAUDE).
|
||||||
|
|
||||||
|
Order:
|
||||||
|
1. **src/ comments** (~200) — reword `foreign`→`extern`/`runtime-class` to match the
|
||||||
|
renamed identifiers. KEEP: the rejection-message string, the `hash_foreign` token +
|
||||||
|
its `#foreignx`/`lex hash_foreign` test, and any comment that legitimately explains
|
||||||
|
the cutover (it must name `#foreign` to say it's removed). The ast.zig FnDecl comment
|
||||||
|
still says "mirroring `#foreign LIB "csym"` (foreign_lib/foreign_name)" — reword.
|
||||||
|
2. **examples/*.sx comments** — the deferred provenance comments (full list in the prior
|
||||||
|
Next-step revision / git). ⚠ Many CONTRAST `#foreign` vs `extern` — reword to stay
|
||||||
|
coherent. ⚠ `1219-ffi-foreign.sx` prints `"foreign-rename: {}"`/`"=== 15. Foreign ==="`
|
||||||
|
to STDOUT — changing those regens its snapshot (intentional). `1176`/`1216` legitimately
|
||||||
|
discuss `#foreign` removal — keep minimal `#foreign` mentions where the test IS about it.
|
||||||
|
3. **issues/*.md** (~20) — rewrite writeup prose to `extern`/`export`/`runtime-class`.
|
||||||
|
4. **docs** — specs.md (rename "Foreign Function Interface" heading → "C Interop"; the
|
||||||
|
`#import c` "foreign declarations" prose; the comptime "foreign function calls" line;
|
||||||
|
§3344 "foreign code can't observe the error channel"), readme.md (211-212 the `#import
|
||||||
|
c` exemption prose), CLAUDE.md (host_ffi `#foreign("c")` ref → `extern`; "foreign calls").
|
||||||
|
5. **9.0 surface decision** (recommend KEEP `hash_foreign` token + rejection for a good
|
||||||
|
deprecation — then it + the message + 1176 + `#foreignx` are permanent gate-exempt keeps).
|
||||||
|
6. **9.4 gate** — `grep -rniIE 'foreign'` over `.sx` + docs + `src/` minus the keep-list → 0.
|
||||||
|
KEEP-LIST (gate-exempt): `SQLITE_CONSTRAINT_FOREIGNKEY` + SQLite API names, vendored
|
||||||
|
`library/vendors/sqlite/c/*`, the `hash_foreign` token + `#foreignx` test + rejection
|
||||||
|
message string, `1176-diagnostics-foreign-removed.sx` (rejection test must contain it).
|
||||||
**Gate (scoped per user 2026-06-15):** `grep -rniIE 'foreign'` → 0 across `.sx` files,
|
**Gate (scoped per user 2026-06-15):** `grep -rniIE 'foreign'` → 0 across `.sx` files,
|
||||||
all docs, and our `src/` Zig — EXCLUDING the legitimate keeps listed in Last completed
|
all docs, and our `src/` Zig — EXCLUDING the legitimate keeps listed in Last completed
|
||||||
step (SQLite API names, vendored C, the rejection test/message + `hash_foreign` token).
|
step (SQLite API names, vendored C, the rejection test/message + `hash_foreign` token).
|
||||||
@@ -457,6 +505,14 @@ Part A ratified (bare / postfix / `⇒ callconv(.c)` / lib-separate). Part B:
|
|||||||
deleted at cutover). Affects only diagnostic wording — IR/behavior identical either way.
|
deleted at cutover). Affects only diagnostic wording — IR/behavior identical either way.
|
||||||
|
|
||||||
## Log
|
## Log
|
||||||
|
- (9.2a-d) **RUNTIME-CLASS IDENTIFIER PURGE COMPLETE** (Decision 5 → `Runtime*`).
|
||||||
|
9.2a types (`3354446`), 9.2b fns+state+`is_extern` flag (`5c8af6e`, fixed `a15a868`
|
||||||
|
per user: reuse `is_extern` not new `is_reference`), 9.2c extern-ref validators →
|
||||||
|
`Extern` (`d27be42`), 9.2d `foreign_path`→`runtime_path` coupled across the build-hook
|
||||||
|
boundary + 37 `.ir` regens (`8cca3b9`). `src/` now has ZERO `foreign` identifiers
|
||||||
|
(only comments + the kept token/message remain). Suite green throughout.
|
||||||
|
- (9.1d) Eliminated the `foreign_expr` AST node — migrated `c_import.zig` auto-synth to
|
||||||
|
the extern shape, deleted the node + all readers. `refactor` `7ffdc7d`.
|
||||||
- (9.1c) Deleted dead `VarDecl.is_foreign`/`foreign_lib`/`foreign_name` (global `#foreign`
|
- (9.1c) Deleted dead `VarDecl.is_foreign`/`foreign_lib`/`foreign_name` (global `#foreign`
|
||||||
rejects → write-dead); 3 decl.zig readers simplified to `vd.extern_name`/`vd.is_extern`.
|
rejects → write-dead); 3 decl.zig readers simplified to `vd.extern_name`/`vd.is_extern`.
|
||||||
Snapshot-neutral; suite green (646/444). `refactor` `cd14794`.
|
Snapshot-neutral; suite green (646/444). `refactor` `cd14794`.
|
||||||
|
|||||||
Reference in New Issue
Block a user