From a42d196055bf2019b8c13141f489f497a3f58842 Mon Sep 17 00:00:00 2001 From: Torsten Schmits Date: Sat, 4 May 2024 02:42:31 +0200 Subject: [PATCH] bump tree-sitter-cli in package.json --- README.md | 2 +- bindings/rust/build.rs | 3 +++ nix/outputs.nix | 2 +- package-lock.json | 8 +++---- package.json | 2 +- src/tree_sitter/parser.h | 51 +++++++++++++++++++++++++++++++++------- 6 files changed, 53 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 81859a58..e4bdcecd 100644 --- a/README.md +++ b/README.md @@ -331,7 +331,7 @@ Nix derivation: `nix build .#parser-lib` The parser can be compiled to WebAssembly as well, which requires `emscripten`: ``` -$ tree-sitter build-wasm +$ tree-sitter build --wasm ``` The resulting binary is written to `$PWD/tree-sitter-haskell.wasm`. diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index f7aaf166..5449d529 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -7,6 +7,9 @@ fn main() { .flag_if_supported("-Wno-unused-parameter") .flag_if_supported("-Wno-unused-but-set-variable") .flag_if_supported("-Wno-trigraphs"); + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); + let parser_path = src_dir.join("parser.c"); c_config.file(&parser_path); diff --git a/nix/outputs.nix b/nix/outputs.nix index 53f02331..9235a5e6 100644 --- a/nix/outputs.nix +++ b/nix/outputs.nix @@ -73,7 +73,7 @@ runHook preBuild mkdir -p .emscriptencache export EM_CACHE=$(pwd)/.emscriptencache - tree-sitter build-wasm + tree-sitter build --wasm runHook postBuild ''; diff --git a/package-lock.json b/package-lock.json index 7b94130c..6a7f45bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ }, "devDependencies": { "prebuildify": "^6.0.0", - "tree-sitter-cli": "^0.21.0", + "tree-sitter-cli": "^0.22.0", "web-tree-sitter": "^0.21.0" }, "peerDependencies": { @@ -1275,9 +1275,9 @@ } }, "node_modules/tree-sitter-cli": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.21.0.tgz", - "integrity": "sha512-wA7wT5724fNQW82XDH6zT6ZcYonjrAKLCHHuhLsPcAKULrhp3rNuMvlgBdB5FUBvmjHNhtTZF/qpHenMoRJPBw==", + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.22.5.tgz", + "integrity": "sha512-c3VT46Bc3a6pEd0JAwufbqEw9Q2FRLDp5E230hGvnr+Hivw+Y6jyeP+3T89KDptvn48MOPVmbgaLm69xYgLVTw==", "dev": true, "hasInstallScript": true, "bin": { diff --git a/package.json b/package.json index ee2b050a..280bb8f2 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "prebuildify": "^6.0.0", - "tree-sitter-cli": "^0.21.0", + "tree-sitter-cli": "^0.22.0", "web-tree-sitter": "^0.21.0" }, "scripts": { diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h index 17b4fde9..17f0e94b 100644 --- a/src/tree_sitter/parser.h +++ b/src/tree_sitter/parser.h @@ -86,6 +86,11 @@ typedef union { } entry; } TSParseActionEntry; +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + struct TSLanguage { uint32_t version; uint32_t symbol_count; @@ -125,6 +130,24 @@ struct TSLanguage { const TSStateId *primary_state_ids; }; +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + /* * Lexer Macros */ @@ -154,6 +177,17 @@ struct TSLanguage { goto next_state; \ } +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + #define SKIP(state_value) \ { \ skip = true; \ @@ -203,14 +237,15 @@ struct TSLanguage { } \ }} -#define REDUCE(symbol_val, child_count_val, ...) \ - {{ \ - .reduce = { \ - .type = TSParseActionTypeReduce, \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ }} #define RECOVER() \