mirror of
https://github.com/colbymchenry/codegraph.git
synced 2026-10-26 04:19:33 +08:00
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:
co-authored by
Claude Opus 5.5
parent
22e9f7b337
commit
c58f0417c6
@@ -41,11 +41,10 @@ tree-sitter-ruby = "=0.23.1"
|
||||
# php: the walker calls LANGUAGE_PHP (the full HTML-interleaving variant the
|
||||
# wasm ships) — NEVER LANGUAGE_PHP_ONLY, which errors on leading HTML.
|
||||
tree-sitter-php = "=0.24.2"
|
||||
# swift: the vendored wasm is built from THIS crate's tarball src/ (the tag's
|
||||
# checked-in parser.c is an older ABI-14 generation that can never sha-match;
|
||||
# grammar.json rules are JSON-equal — swift checklist header). parser.c is
|
||||
# ~20MB generated — expect slow compiles.
|
||||
tree-sitter-swift = "=0.7.3"
|
||||
# swift: NOT a crate dep — the kernel compiles tree-sitter-swift 0.7.3's
|
||||
# tarball src/ itself (grammars/swift, build.rs), with a one-line scanner fix
|
||||
# the crate's own build lacks on Windows (`try!`; docs/grammars/
|
||||
# tree-sitter-swift.md). The vendored wasm is built from the same tarball.
|
||||
# r: the vendored wasm IS r-lib v1.2.0 and this crate's tarball ships both
|
||||
# generated artifacts sha-identical to the tag (parser.c 6221657347…,
|
||||
# scanner.c 1209d11076… — r checklist §Grammar prep). ABI 14 (the tag
|
||||
@@ -59,7 +58,7 @@ tree-sitter-r = "=1.2.0"
|
||||
tree-sitter-luau = "=1.2.0"
|
||||
|
||||
# tree-sitter-language: the version-agnostic LanguageFn shim for the vendored
|
||||
# kotlin grammar C (see build.rs — no kotlin crate dep is possible).
|
||||
# grammar C (kotlin, lua, scala, dart, swift — see build.rs).
|
||||
tree-sitter-language = "0.1"
|
||||
|
||||
# Stack-bounds queries for the walker stack guard (src/stack.rs, #1581):
|
||||
|
||||
Reference in New Issue
Block a user