From 5a8dbc6347b3541e84fe669b22c17ad3b715e258 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Wed, 21 Jan 2026 20:22:09 +0100 Subject: Engage! --- .../mitjafelicijan/go-tree-sitter/bindings.c | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 vendor/github.com/mitjafelicijan/go-tree-sitter/bindings.c (limited to 'vendor/github.com/mitjafelicijan/go-tree-sitter/bindings.c') diff --git a/vendor/github.com/mitjafelicijan/go-tree-sitter/bindings.c b/vendor/github.com/mitjafelicijan/go-tree-sitter/bindings.c new file mode 100644 index 0000000..58d7994 --- /dev/null +++ b/vendor/github.com/mitjafelicijan/go-tree-sitter/bindings.c @@ -0,0 +1,50 @@ +#include "api.h" +#include "bindings.h" +#include +#include + +static void stderr_log(void *payload, TSLogType type, const char *msg) +{ + bool include_lexing = (bool)payload; + switch (type) + { + case TSLogTypeParse: + fprintf(stderr, "* %s\n", msg); + break; + case TSLogTypeLex: + if (include_lexing) + fprintf(stderr, " %s\n", msg); + break; + } +} + +TSLogger stderr_logger_new(bool include_lexing) +{ + TSLogger result; + result.payload = (void *)include_lexing; + result.log = stderr_log; + return result; +} + +const char *call_callReadFunc(void *payload, uint32_t byte_index, TSPoint position, uint32_t *bytes_read) +{ + ParsePayload *p = payload; + if (p->previous_content != NULL) + { + free(p->previous_content); + } + p->previous_content = callReadFunc(p->read_function_id, byte_index, position, bytes_read); + return p->previous_content; +} + +TSTree *call_ts_parser_parse(TSParser *self, const TSTree *old_tree, int read_function_id, TSInputEncoding encoding) +{ + ParsePayload payload = {read_function_id, NULL}; + TSInput input = {&payload, call_callReadFunc, encoding}; + TSTree *tree = ts_parser_parse(self, old_tree, input); + if (payload.previous_content != NULL) + { + free(payload.previous_content); + } + return tree; +} \ No newline at end of file -- cgit v1.2.3