diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-24 13:04:20 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:14 -0300 |
| commit | b4fc9fed0c2d10cd8c1b3b99246b39c262ac5ade (patch) | |
| tree | f1d6357456dc85b9fb7bab84afc48915aaf7c16f /src/config.zig | |
| parent | 1ba82eedb79d6c9fbc9b80dcac9315645d141f25 (diff) | |
| download | pardes-b4fc9fed0c2d10cd8c1b3b99246b39c262ac5ade.tar.gz pardes-b4fc9fed0c2d10cd8c1b3b99246b39c262ac5ade.zip | |
Allocate tree-sitter's external scanners from the same Zig allocator as its runtime
syntax.zig points the tree-sitter runtime at a Zig allocator, but the
grammars' external scanners did not follow it. A grammar's
tree_sitter/alloc.h maps ts_malloc to the runtime's current allocator only
when TREE_SITTER_REUSE_ALLOCATOR is defined, and plain malloc otherwise, so
every scanner's state and its arrays came from libc. Five scanners (bash,
markdown, markdown_inline, python, typst) also call malloc, calloc, realloc
and free by name.
build.zig now compiles every grammar with TREE_SITTER_REUSE_ALLOCATOR and
forces in src/tree_sitter_heap.h, which includes stdlib.h and then defines
the four names as calls through ts_current_malloc and friends. A header
forced in from the build rather than a patch to the grammars keeps zig-pkg
pristine. No grammar archive refers to libc's allocator any more; only the
runtime does, for its defaults. A scanner frees only what it allocated
itself, and the syntax tests that create and destroy a parser for every
grammar under a leak-checking allocator pass.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Diffstat (limited to 'src/config.zig')
0 files changed, 0 insertions, 0 deletions
