mirror of
https://github.com/colbymchenry/codegraph.git
synced 2026-10-24 03:08:45 +08:00
c58f0417c6
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>
55 lines
985 B
C
55 lines
985 B
C
#ifndef TREE_SITTER_ALLOC_H_
|
|
#define TREE_SITTER_ALLOC_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
// Allow clients to override allocation functions
|
|
#ifdef TREE_SITTER_REUSE_ALLOCATOR
|
|
|
|
extern void *(*ts_current_malloc)(size_t size);
|
|
extern void *(*ts_current_calloc)(size_t count, size_t size);
|
|
extern void *(*ts_current_realloc)(void *ptr, size_t size);
|
|
extern void (*ts_current_free)(void *ptr);
|
|
|
|
#ifndef ts_malloc
|
|
#define ts_malloc ts_current_malloc
|
|
#endif
|
|
#ifndef ts_calloc
|
|
#define ts_calloc ts_current_calloc
|
|
#endif
|
|
#ifndef ts_realloc
|
|
#define ts_realloc ts_current_realloc
|
|
#endif
|
|
#ifndef ts_free
|
|
#define ts_free ts_current_free
|
|
#endif
|
|
|
|
#else
|
|
|
|
#ifndef ts_malloc
|
|
#define ts_malloc malloc
|
|
#endif
|
|
#ifndef ts_calloc
|
|
#define ts_calloc calloc
|
|
#endif
|
|
#ifndef ts_realloc
|
|
#define ts_realloc realloc
|
|
#endif
|
|
#ifndef ts_free
|
|
#define ts_free free
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // TREE_SITTER_ALLOC_H_
|