fix(swift): a call written after try! links what it calls on Windows (#2683)

The Windows kernels read the `!` of every `try!` as a logical not, so
`try! Message2(data: d)` became a call of `! Message2` that never resolves,
and a call through a receiver lost it: `try! Settings.Defaults.load()` was a
bare `load`.

The cause is the grammar's C, not the walker. tree-sitter-swift 0.7.3's
external scanner steps aside for the `!` of `try!` through a 64-bit mask
whose entry is built as `1UL << FAKE_TRY_BANG`, bit 32. `unsigned long` is 32
bits on Windows and MSVC folds the overflowing shift to 0 (warning C4293),
so the scanner never stepped aside: `try` parsed alone, then a prefix `!` on
the callee. macOS and Linux have 64-bit longs, and clang's wasm32 build folds
the shift to bit 31 (`_directive_endif`, valid at every expression start),
so the wasm and the other kernels have always read `try!` right.

The kernel now compiles the crate tarball's src/ itself, from
codegraph-kernel/grammars/swift, with upstream 0.7.4's one-line fix (`1ULL`),
as it already does for the Kotlin, Lua, Scala and Dart grammars. The patch and
its provenance are in docs/grammars/tree-sitter-swift.patch and .md. parser.c
is unchanged, so the node-kind and field tables still match the wasm, which
is untouched.

TortureTry.swift pins calls after try!, try? and try on both engines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Colby Mchenry
2026-10-19 21:49:17 +00:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 22e9f7b337
commit c58f0417c6
17 changed files with 617105 additions and 26 deletions
+7 -5
View File
@@ -422,11 +422,13 @@ const VENDORED_WASM_LANGS: ReadonlySet<GrammarLanguage> = new Set([
// R7b (Swift kernel port prep): tree-sitter-swift crate 0.7.3. Built from
// the CRATE TARBALL's src/ (NOT a tag sha-match: alex-pinkus keeps
// generated files off main and the 0.7.3-with-generated-files tag ships an
// older ABI-14 generation; grammar.json rules are JSON-equal, and the crate
// tarball is byte-for-byte what the kernel's cargo build compiles — table
// identity by construction). Replaces the ^0.4.0 tree-sitter-wasms build
// (ABI 13 → 15). NOT graph-neutral — delta is error-set membership only;
// classified list in the swift checklist doc.
// older ABI-14 generation; grammar.json rules are JSON-equal, and the
// kernel compiles the same tarball's src/ (codegraph-kernel/grammars/swift)
// — table identity by construction). Replaces the ^0.4.0 tree-sitter-wasms
// build (ABI 13 → 15). NOT graph-neutral — delta is error-set membership
// only; classified list in the swift checklist doc. The kernel's copy
// carries docs/grammars/tree-sitter-swift.patch (`try!` on Windows); this
// wasm doesn't need it — see that doc's .md.
'swift',
// R7b (Kotlin kernel port prep): fwcd tree-sitter-kotlin 0.3.8 (tag
// e1a2d5a), parser.c/scanner.c sha-matched crate↔tag; behavior-IDENTICAL