diff --git a/.editorconfig b/.editorconfig index d3a8b5b..f363cc5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,9 +2,6 @@ root = true [*] charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true [*.{json,toml,yml,gyp}] indent_style = space @@ -14,11 +11,11 @@ indent_size = 2 indent_style = space indent_size = 2 -[*.rs] +[*.{c,cc,h}] indent_style = space indent_size = 4 -[*.{c,cc,h}] +[*.rs] indent_style = space indent_size = 4 @@ -37,3 +34,6 @@ indent_size = 8 [Makefile] indent_style = tab indent_size = 8 + +[parser.c] +indent_size = 2 diff --git a/.gitattributes b/.gitattributes index ffb52ab..4cb1058 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -* text eol=lf +* text=auto eol=lf src/*.json linguist-generated src/parser.c linguist-generated diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 28bf207..d699644 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,10 +30,18 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-14] steps: - - name: Set up repository - uses: tree-sitter/parser-setup-action@v1.1 + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install tree-sitter CLI + uses: tree-sitter/setup-action/cli@v1 + - name: Run tests + uses: tree-sitter/parser-test-action@v2 with: - node-version: ${{vars.NODE_VERSION}} + test-rust: ${{runner.os == 'Linux'}} + test-node: true + test-python: true + test-go: true + test-swift: ${{runner.os == 'macOS'}} - name: Clone apisix corpus uses: actions/checkout@v4 with: @@ -73,11 +81,10 @@ jobs: with: path: examples/xmake repository: xmake-io/xmake - - name: Run tests - uses: tree-sitter/parser-test-action@v1.2 + - name: Parse examples + uses: tree-sitter/parse-action@v4 with: - test-library: ${{runner.os == 'Linux'}} - corpus-files: |- + files: |- examples/apisix/**/*.lua examples/kong/**/*.lua examples/lua/**/*.lua diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f929217..8f1fa02 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,3 +15,7 @@ jobs: uses: tree-sitter/workflows/.github/workflows/package-crates.yml@main secrets: CARGO_REGISTRY_TOKEN: ${{secrets.CARGO_TOKEN}} + pypi: + uses: tree-sitter/workflows/.github/workflows/package-pypi.yml@main + secrets: + PYPI_API_TOKEN: ${{secrets.PYPI_TOKEN}} diff --git a/.gitignore b/.gitignore index 70bef74..2fd9dac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,17 @@ # Rust artifacts -Cargo.lock target/ # Node artifacts build/ +prebuilds/ node_modules/ *.tgz # Swift artifacts .build/ +Package.resolved # Go artifacts -go.sum _obj/ # Python artifacts @@ -32,7 +32,6 @@ dist/ /examples/*/ # Grammar volatiles -dsl.d.ts *.wasm *.obj *.o diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..b4d69ab --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,89 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "cc" +version = "1.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" +dependencies = [ + "shlex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "tree-sitter" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20f4cd3642c47a85052a887d86704f4eac272969f61b686bdd3f772122aabaff" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2545046bd1473dac6c626659cc2567c6c0ff302fc8b84a56c4243378276f7f57" + +[[package]] +name = "tree-sitter-lua" +version = "0.2.0" +dependencies = [ + "cc", + "tree-sitter", + "tree-sitter-language", +] diff --git a/Cargo.toml b/Cargo.toml index 01d7b9a..f502436 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tree-sitter-lua" description = "Lua grammar for tree-sitter" -version = "0.1.0" +version = "0.2.0" license = "MIT" readme = "README.md" keywords = ["incremental", "parsing", "tree-sitter", "lua"] @@ -18,7 +18,10 @@ include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"] path = "bindings/rust/lib.rs" [dependencies] -tree-sitter = ">=0.21.0" +tree-sitter-language = "0.1.0" [build-dependencies] -cc = "^1.0.89" +cc = "1.1.18" + +[dev-dependencies] +tree-sitter = "0.23" diff --git a/Makefile b/Makefile index 639c926..00b7952 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,8 @@ -VERSION := 0.1.0 +ifeq ($(OS),Windows_NT) +$(error Windows is not supported) +endif + +VERSION := 0.2.0 LANGUAGE_NAME := tree-sitter-lua @@ -17,44 +21,44 @@ endif TS ?= tree-sitter -# ABI versioning -SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION))) -SONAME_MINOR := $(word 2,$(subst ., ,$(VERSION))) - # install directory layout PREFIX ?= /usr/local INCLUDEDIR ?= $(PREFIX)/include LIBDIR ?= $(PREFIX)/lib PCLIBDIR ?= $(LIBDIR)/pkgconfig -# object files -OBJS := $(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c)) +# source/object files +PARSER := $(SRC_DIR)/parser.c +EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) +OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) # flags -ARFLAGS := rcs +ARFLAGS ?= rcs override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC +# ABI versioning +SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION))) +SONAME_MINOR := $(shell sed -n 's/#define LANGUAGE_VERSION //p' $(PARSER)) + # OS-specific bits -ifeq ($(OS),Windows_NT) - $(error "Windows is not supported") -else ifeq ($(shell uname),Darwin) +ifeq ($(shell uname),Darwin) SOEXT = dylib - SOEXTVER_MAJOR = $(SONAME_MAJOR).dylib - SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).dylib + SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) + SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) LINKSHARED := $(LINKSHARED)-dynamiclib -Wl, ifneq ($(ADDITIONAL_LIBS),) LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS), endif - LINKSHARED := $(LINKSHARED)-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SONAME_MAJOR).dylib,-rpath,@executable_path/../Frameworks + LINKSHARED := $(LINKSHARED)-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks else SOEXT = so - SOEXTVER_MAJOR = so.$(SONAME_MAJOR) - SOEXTVER = so.$(SONAME_MAJOR).$(SONAME_MINOR) + SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) + SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) LINKSHARED := $(LINKSHARED)-shared -Wl, ifneq ($(ADDITIONAL_LIBS),) LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS) endif - LINKSHARED := $(LINKSHARED)-soname,lib$(LANGUAGE_NAME).so.$(SONAME_MAJOR) + LINKSHARED := $(LINKSHARED)-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) endif ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) PCLIBDIR := $(PREFIX)/libdata/pkgconfig @@ -81,13 +85,14 @@ $(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in -e 's|=$(PREFIX)|=$${prefix}|' \ -e 's|@PREFIX@|$(PREFIX)|' $< > $@ -$(SRC_DIR)/parser.c: grammar.js - $(TS) generate --no-bindings +$(PARSER): $(SRC_DIR)/grammar.json + $(TS) generate --no-bindings $^ install: all - install -Dm644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h - install -Dm644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc - install -Dm755 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a + install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' + install -m644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h + install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) diff --git a/Package.swift b/Package.swift index 7022307..f8f602e 100644 --- a/Package.swift +++ b/Package.swift @@ -3,47 +3,58 @@ import PackageDescription let package = Package( name: "TreeSitterLua", - platforms: [.macOS(.v10_13), .iOS(.v11)], products: [ .library(name: "TreeSitterLua", targets: ["TreeSitterLua"]), ], - dependencies: [], + dependencies: [ + .package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.8.0"), + ], targets: [ - .target(name: "TreeSitterLua", - path: ".", - exclude: [ - "Cargo.toml", - "Makefile", - "binding.gyp", - "bindings/c", - "bindings/go", - "bindings/node", - "bindings/python", - "bindings/rust", - "prebuilds", - "node_modules", - "grammar.js", - "package.json", - "package-lock.json", - "pyproject.toml", - "setup.py", - "test", - "types", - "examples", - ".editorconfig", - ".github", - ".gitignore", - ".gitattributes", - ], - sources: [ - "src/parser.c", - "src/scanner.c", - ], - resources: [ - .copy("queries") - ], - publicHeadersPath: "bindings/swift", - cSettings: [.headerSearchPath("src")]) + .target( + name: "TreeSitterLua", + dependencies: [], + path: ".", + exclude: [ + "Cargo.toml", + "Makefile", + "binding.gyp", + "bindings/c", + "bindings/go", + "bindings/node", + "bindings/python", + "bindings/rust", + "prebuilds", + "grammar.js", + "package.json", + "package-lock.json", + "pyproject.toml", + "setup.py", + "test", + "examples", + ".editorconfig", + ".github", + ".gitignore", + ".gitattributes", + ".gitmodules", + ], + sources: [ + "src/parser.c", + "src/scanner.c", + ], + resources: [ + .copy("queries") + ], + publicHeadersPath: "bindings/swift", + cSettings: [.headerSearchPath("src")] + ), + .testTarget( + name: "TreeSitterLuaTests", + dependencies: [ + "SwiftTreeSitter", + "TreeSitterLua", + ], + path: "bindings/swift/TreeSitterLuaTests" + ) ], cLanguageStandard: .c11 ) diff --git a/binding.gyp b/binding.gyp index b8142ff..5c83586 100644 --- a/binding.gyp +++ b/binding.gyp @@ -13,8 +13,17 @@ "src/parser.c", "src/scanner.c", ], - "cflags_c": [ - "-std=c11", + "conditions": [ + ["OS!='win'", { + "cflags_c": [ + "-std=c11", + ], + }, { # OS == "win" + "cflags_c": [ + "/std:c11", + "/utf-8", + ], + }], ], } ] diff --git a/bindings/go/binding_test.go b/bindings/go/binding_test.go index 52d4bd5..75089a7 100644 --- a/bindings/go/binding_test.go +++ b/bindings/go/binding_test.go @@ -3,8 +3,8 @@ package tree_sitter_lua_test import ( "testing" - tree_sitter "github.com/smacker/go-tree-sitter" - "github.com/tree-sitter/tree-sitter-lua" + tree_sitter_lua "github.com/tree-sitter-grammars/tree-sitter-lua/bindings/go" + tree_sitter "github.com/tree-sitter/go-tree-sitter" ) func TestCanLoadGrammar(t *testing.T) { diff --git a/bindings/go/go.mod b/bindings/go/go.mod deleted file mode 100644 index 497ac88..0000000 --- a/bindings/go/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/tree-sitter-grammars/tree-sitter-lua - -go 1.22 - -require github.com/smacker/go-tree-sitter v0.0.0-20230720070738-0d0a9f78d8f8 diff --git a/bindings/node/binding.cc b/bindings/node/binding.cc index 10b452d..896ea30 100644 --- a/bindings/node/binding.cc +++ b/bindings/node/binding.cc @@ -6,7 +6,7 @@ extern "C" TSLanguage *tree_sitter_lua(); // "tree-sitter", "language" hashed with BLAKE2 const napi_type_tag LANGUAGE_TYPE_TAG = { - 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 + 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 }; Napi::Object Init(Napi::Env env, Napi::Object exports) { diff --git a/bindings/node/binding_test.js b/bindings/node/binding_test.js new file mode 100644 index 0000000..afede30 --- /dev/null +++ b/bindings/node/binding_test.js @@ -0,0 +1,9 @@ +/// + +const assert = require("node:assert"); +const { test } = require("node:test"); + +test("can load grammar", () => { + const parser = new (require("tree-sitter"))(); + assert.doesNotThrow(() => parser.setLanguage(require("."))); +}); diff --git a/bindings/python/tests/test_binding.py b/bindings/python/tests/test_binding.py new file mode 100644 index 0000000..fbe60cc --- /dev/null +++ b/bindings/python/tests/test_binding.py @@ -0,0 +1,11 @@ +from unittest import TestCase + +import tree_sitter, tree_sitter_lua + + +class TestLanguage(TestCase): + def test_can_load_grammar(self): + try: + tree_sitter.Language(tree_sitter_lua.language()) + except Exception: + self.fail("Error loading Lua grammar") diff --git a/bindings/python/tree_sitter_lua/__init__.py b/bindings/python/tree_sitter_lua/__init__.py index 1ccaaef..3f96411 100644 --- a/bindings/python/tree_sitter_lua/__init__.py +++ b/bindings/python/tree_sitter_lua/__init__.py @@ -1,3 +1,40 @@ -"Lua grammar for tree-sitter" +"""Lua grammar for tree-sitter""" + +from importlib.resources import files as _files from ._binding import language + + +def _get_query(name, file): + query = _files(f"{__package__}.queries") / file + globals()[name] = query.read_text() + return globals()[name] + + +def __getattr__(name): + if name == "HIGHLIGHTS_QUERY": + return _get_query("HIGHLIGHTS_QUERY", "highlights.scm") + if name == "INJECTIONS_QUERY": + return _get_query("INJECTIONS_QUERY", "injections.scm") + if name == "LOCALS_QUERY": + return _get_query("LOCALS_QUERY", "locals.scm") + if name == "TAGS_QUERY": + return _get_query("TAGS_QUERY", "tags.scm") + + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +__all__ = [ + "language", + "HIGHLIGHTS_QUERY", + "INJECTIONS_QUERY", + "LOCALS_QUERY", + "TAGS_QUERY", +] + + +def __dir__(): + return sorted(__all__ + [ + "__all__", "__builtins__", "__cached__", "__doc__", "__file__", + "__loader__", "__name__", "__package__", "__path__", "__spec__", + ]) diff --git a/bindings/python/tree_sitter_lua/__init__.pyi b/bindings/python/tree_sitter_lua/__init__.pyi index 5416666..991b926 100644 --- a/bindings/python/tree_sitter_lua/__init__.pyi +++ b/bindings/python/tree_sitter_lua/__init__.pyi @@ -1 +1,8 @@ -def language() -> int: ... +from typing import Final + +HIGHLIGHTS_QUERY: Final[str] +INJECTIONS_QUERY: Final[str] +LOCALS_QUERY: Final[str] +TAGS_QUERY: Final[str] + +def language() -> object: ... diff --git a/bindings/python/tree_sitter_lua/binding.c b/bindings/python/tree_sitter_lua/binding.c index 4ac029d..ee742c6 100644 --- a/bindings/python/tree_sitter_lua/binding.c +++ b/bindings/python/tree_sitter_lua/binding.c @@ -4,8 +4,8 @@ typedef struct TSLanguage TSLanguage; TSLanguage *tree_sitter_lua(void); -static PyObject* _binding_language(PyObject *self, PyObject *args) { - return PyLong_FromVoidPtr(tree_sitter_lua()); +static PyObject* _binding_language(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(args)) { + return PyCapsule_New(tree_sitter_lua(), "tree_sitter.Language", NULL); } static PyMethodDef methods[] = { diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index bfe252b..7ac371e 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -2,11 +2,11 @@ fn main() { let src_dir = std::path::Path::new("src"); let mut c_config = cc::Build::new(); - c_config.include(src_dir); - c_config - .flag_if_supported("-Wno-unused-parameter") - .flag_if_supported("-Wno-unused-but-set-variable") - .flag_if_supported("-Wno-trigraphs"); + c_config.std("c11").include(src_dir); + + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); + let parser_path = src_dir.join("parser.c"); c_config.file(&parser_path); println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); diff --git a/bindings/rust/lib.rs b/bindings/rust/lib.rs index 7a64e74..adbb219 100644 --- a/bindings/rust/lib.rs +++ b/bindings/rust/lib.rs @@ -4,11 +4,16 @@ //! tree-sitter [Parser][], and then use the parser to parse some code: //! //! ``` +//! use tree_sitter::Parser; +//! //! let code = r#" //! return 42 //! "#; -//! let mut parser = tree_sitter::Parser::new(); -//! parser.set_language(&tree_sitter_lua::language()).expect("Error loading lua grammar"); +//! let mut parser = Parser::new(); +//! let language = tree_sitter_lua::LANGUAGE; +//! parser +//! .set_language(&language.into()) +//! .expect("Error loading Lua parser"); //! let tree = parser.parse(code, None).unwrap(); //! assert!(!tree.root_node().has_error()); //! ``` @@ -18,27 +23,30 @@ //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html //! [tree-sitter]: https://tree-sitter.github.io/ -use tree_sitter::Language; +use tree_sitter_language::LanguageFn; extern "C" { - fn tree_sitter_lua() -> Language; + fn tree_sitter_lua() -> *const (); } -/// Get the tree-sitter [Language][] for this grammar. -/// -/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html -pub fn language() -> Language { - unsafe { tree_sitter_lua() } -} +/// The tree-sitter [`LanguageFn`] for this grammar. +pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_lua) }; /// The content of the [`node-types.json`][] file for this grammar. /// /// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types pub const NODE_TYPES: &str = include_str!("../../src/node-types.json"); +/// The syntax highlighting query for this language. pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm"); + +/// The injection query for this language. pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm"); + +/// The local-variable syntax highlighting query for this language. pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm"); + +/// The symbol tagging query for this language. pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm"); #[cfg(test)] @@ -47,7 +55,7 @@ mod tests { fn test_can_load_grammar() { let mut parser = tree_sitter::Parser::new(); parser - .set_language(&super::language()) - .expect("Error loading Lua language"); + .set_language(&super::LANGUAGE.into()) + .expect("Error loading Lua parser"); } } diff --git a/bindings/swift/TreeSitterLuaTests/TreeSitterLuaTests.swift b/bindings/swift/TreeSitterLuaTests/TreeSitterLuaTests.swift new file mode 100644 index 0000000..d46f08d --- /dev/null +++ b/bindings/swift/TreeSitterLuaTests/TreeSitterLuaTests.swift @@ -0,0 +1,12 @@ +import XCTest +import SwiftTreeSitter +import TreeSitterLua + +final class TreeSitterLuaTests: XCTestCase { + func testCanLoadGrammar() throws { + let parser = Parser() + let language = Language(language: tree_sitter_lua()) + XCTAssertNoThrow(try parser.setLanguage(language), + "Error loading Lua grammar") + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..234a677 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module github.com/tree-sitter-grammars/tree-sitter-lua + +go 1.23 + +require github.com/tree-sitter/go-tree-sitter v0.23.1 + +require github.com/mattn/go-pointer v0.0.1 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d775361 --- /dev/null +++ b/go.sum @@ -0,0 +1,36 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tree-sitter/go-tree-sitter v0.23.1 h1:HCfaE19sKfG7q190xfM1loUZf6wEHa4TDqDEW46s9Lg= +github.com/tree-sitter/go-tree-sitter v0.23.1/go.mod h1:EvIVhMvvPNvhu9x+ddSPxSnUEU5AnsSwi1LMqXIVE3A= +github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb h1:A8425heRM8mylnv4H58FPUiH+aYivyitre0PzxrfmWs= +github.com/tree-sitter/tree-sitter-c v0.21.5-0.20240818205408-927da1f210eb/go.mod h1:dOF6gtQiF9UwNh995T5OphYmtIypkjsp3ap7r9AN/iA= +github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148 h1:AfFPZwtwGN01BW1jDdqBVqscTwetvMpydqYZz57RSlc= +github.com/tree-sitter/tree-sitter-cpp v0.22.4-0.20240818224355-b1a4e2b25148/go.mod h1:Bh6U3viD57rFXRYIQ+kmiYtr+1Bx0AceypDLJJSyi9s= +github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33 h1:TwqSV3qLp3tKSqirGLRHnjFk9Tc2oy57LIl+FQ4GjI4= +github.com/tree-sitter/tree-sitter-embedded-template v0.21.1-0.20240819044651-ffbf64942c33/go.mod h1:CvCKCt3v04Ufos1zZnNCelBDeCGRpPucaN8QczoUsN4= +github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012 h1:Xvxck3tE5FW7F7bTS97iNM2ADMyCMJztVqn5HYKdJGo= +github.com/tree-sitter/tree-sitter-go v0.21.3-0.20240818010209-8c0f0e7a6012/go.mod h1:T40D0O1cPvUU/+AmiXVXy1cncYQT6wem4Z0g4SfAYvY= +github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0 h1:c46K6uh5Dz00zJeU9BfjXdb8I+E4RkUdfnWJpQADXFo= +github.com/tree-sitter/tree-sitter-html v0.20.5-0.20240818004741-d11201a263d0/go.mod h1:hcNt/kOJHcIcuMvouE7LJcYdeFUFbVpBJ6d4wmOA+tU= +github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495 h1:jrt4qbJVEFs4H93/ITxygHc6u0TGqAkkate7TQ4wFSA= +github.com/tree-sitter/tree-sitter-java v0.21.1-0.20240824015150-576d8097e495/go.mod h1:oyaR7fLnRV0hT9z6qwE9GkaeTom/hTDwK3H2idcOJFc= +github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5 h1:om4X9AVg3asL8gxNJDcz4e/Wp+VpQj1PY3uJXKr6EOg= +github.com/tree-sitter/tree-sitter-javascript v0.21.5-0.20240818005344-15887341e5b5/go.mod h1:nNqgPoV/h9uYWk6kYEFdEAhNVOacpfpRW5SFmdaP4tU= +github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5 h1:pfV3G3k7NCKqKk8THBmyuh2zA33lgYHS3GVrzRR8ry4= +github.com/tree-sitter/tree-sitter-json v0.21.1-0.20240818005659-bdd69eb8c8a5/go.mod h1:GbMKRjLfk0H+PI7nLi1Sx5lHf5wCpLz9al8tQYSxpEk= +github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1 h1:ZXZMDwE+IhUtGug4Brv6NjJWUU3rfkZBKpemf6RY8/g= +github.com/tree-sitter/tree-sitter-php v0.22.9-0.20240819002312-a552625b56c1/go.mod h1:UKCLuYnJ312Mei+3cyTmGOHzn0YAnaPRECgJmHtzrqs= +github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb h1:EXEM82lFM7JjJb6qiKZXkpIDaCcbV2obNn82ghwj9lw= +github.com/tree-sitter/tree-sitter-python v0.21.1-0.20240818005537-55a9b8a4fbfb/go.mod h1:lXCF1nGG5Dr4J3BTS0ObN4xJCCICiSu/b+Xe/VqMV7g= +github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d h1:fcYCvoXdcP1uRQYXqJHRy6Hec+uKScQdKVtMwK9JeCI= +github.com/tree-sitter/tree-sitter-ruby v0.21.1-0.20240818211811-7dbc1e2d0e2d/go.mod h1:T1nShQ4v5AJtozZ8YyAS4uzUtDAJj/iv4YfwXSbUHzg= +github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447 h1:o9alBu1J/WjrcTKEthYtXmdkDc5OVXD+PqlvnEZ0Lzc= +github.com/tree-sitter/tree-sitter-rust v0.21.3-0.20240818005432-2b43eafe6447/go.mod h1:1Oh95COkkTn6Ezp0vcMbvfhRP5gLeqqljR0BYnBzWvc= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/package-lock.json b/package-lock.json index b2b846f..0ad7093 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,24 @@ { "name": "@tree-sitter-grammars/tree-sitter-lua", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tree-sitter-grammars/tree-sitter-lua", - "version": "0.1.0", + "version": "0.2.0", "hasInstallScript": true, "license": "MIT", "dependencies": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.1" }, "devDependencies": { - "prebuildify": "^6.0.0", - "tree-sitter-cli": "^0.21.0" + "prebuildify": "^6.0.1", + "tree-sitter-cli": "^0.23.0" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.21.1" }, "peerDependenciesMeta": { "tree_sitter": { @@ -96,15 +96,6 @@ "once": "^1.4.0" } }, - "node_modules/execspawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", - "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", - "dev": true, - "dependencies": { - "util-extend": "^1.0.1" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -177,17 +168,17 @@ } }, "node_modules/node-addon-api": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", - "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", + "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", "engines": { - "node": "^16 || ^18 || >= 20" + "node": "^18 || ^20 || >= 21" } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -225,12 +216,11 @@ } }, "node_modules/prebuildify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.0.tgz", - "integrity": "sha512-DEvK4C3tcimIp7Pzqbs036n9i6CTKGp1XVEpMnr4wV3enKU5sBogPP+lP3KZw7993i42bXnsd5eIxAXQ566Cqw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/prebuildify/-/prebuildify-6.0.1.tgz", + "integrity": "sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==", "dev": true, "dependencies": { - "execspawn": "^1.0.1", "minimist": "^1.2.5", "mkdirp-classic": "^0.5.3", "node-abi": "^3.3.0", @@ -339,24 +329,28 @@ } }, "node_modules/tree-sitter": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.0.tgz", - "integrity": "sha512-WDhpLxQdW7wsmmnBsf4NGqnEKs+Kxljk/CfbJJxgzZiinfA1gAWnhi/GirQjClw+woXhYsNq930BlskFulMMBQ==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz", + "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==", "hasInstallScript": true, "peer": true, "dependencies": { - "node-addon-api": "^7.1.0", + "node-addon-api": "^8.0.0", "node-gyp-build": "^4.8.0" } }, "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.23.0", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.23.0.tgz", + "integrity": "sha512-/DdQaPCCOrOYGp9FxGdhFUnHIrjhfbYatQXgNIcmaAOpPunpnDj2vsO/H+svsfQLaFsQ1C+BjgPhpbV28zka1w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "tree-sitter": "cli.js" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/util-deprecate": { @@ -365,12 +359,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index ce23fe1..472984c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tree-sitter-grammars/tree-sitter-lua", - "version": "0.1.0", + "version": "0.2.0", "description": "Lua grammar for tree-sitter", "repository": "tree-sitter-grammars/tree-sitter-lua", "author": "Munif Tanjim (https://muniftanjim.dev)", @@ -19,18 +19,19 @@ "prebuilds/**", "bindings/node/*", "queries/**", - "src/**" + "src/**", + "*.wasm" ], "dependencies": { - "node-addon-api": "^7.1.0", - "node-gyp-build": "^4.8.0" + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.1" }, "devDependencies": { - "tree-sitter-cli": "^0.21.0", - "prebuildify": "^6.0.0" + "tree-sitter-cli": "^0.23.0", + "prebuildify": "^6.0.1" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.21.1" }, "peerDependenciesMeta": { "tree_sitter": { @@ -38,10 +39,10 @@ } }, "scripts": { - "build": "tree-sitter generate --no-bindings", - "test": "tree-sitter test", "install": "node-gyp-build", - "prebuildify": "prebuildify --napi --strip" + "prestart": "tree-sitter build --wasm", + "start": "tree-sitter playground", + "test": "node --test bindings/node/*_test.js" }, "publishConfig": { "access": "public" diff --git a/pyproject.toml b/pyproject.toml index 7b3f8cc..be78c58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,19 +5,17 @@ build-backend = "setuptools.build_meta" [project] name = "tree-sitter-lua" description = "Lua grammar for tree-sitter" -version = "0.1.0" +version = "0.2.0" keywords = ["incremental", "parsing", "tree-sitter", "lua"] classifiers = [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Compilers", "Topic :: Text Processing :: Linguistic", - "Typing :: Typed" + "Typing :: Typed", ] -authors = [ - {name = "Munif Tanjim", email = "hello@muniftanjim.dev"} -] -requires-python = ">=3.8" +authors = [{ name = "Munif Tanjim", email = "hello@muniftanjim.dev" }] +requires-python = ">=3.9" license.text = "MIT" readme = "README.md" @@ -25,8 +23,8 @@ readme = "README.md" Homepage = "https://github.com/tree-sitter-grammars/tree-sitter-lua" [project.optional-dependencies] -core = ["tree-sitter~=0.21"] +core = ["tree-sitter~=0.23"] [tool.cibuildwheel] -build = "cp38-*" +build = "cp39-*" build-frontend = "build" diff --git a/setup.py b/setup.py index c1d124c..481dcc8 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ class BdistWheel(bdist_wheel): def get_tag(self): python, abi, platform = super().get_tag() if python.startswith("cp"): - python, abi = "cp38", "abi3" + python, abi = "cp39", "abi3" return python, abi, platform @@ -38,12 +38,17 @@ def get_tag(self): "src/parser.c", "src/scanner.c", ], - extra_compile_args=( - ["-std=c11"] if system() != 'Windows' else [] - ), + extra_compile_args=[ + "-std=c11", + "-fvisibility=hidden", + ] if system() != "Windows" else [ + "/std:c11", + "/utf-8", + ], define_macros=[ - ("Py_LIMITED_API", "0x03080000"), - ("PY_SSIZE_T_CLEAN", None) + ("Py_LIMITED_API", "0x03090000"), + ("PY_SSIZE_T_CLEAN", None), + ("TREE_SITTER_HIDE_SYMBOLS", None), ], include_dirs=["src"], py_limited_api=True, diff --git a/src/parser.c b/src/parser.c index 7b7b06b..a9aefd9 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1560,19 +1560,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [261] = 261, }; -static inline bool sym_escape_sequence_character_set_1(int32_t c) { - return (c < 'a' - ? (c < '\'' - ? (c < '"' - ? c == '\n' - : c <= '"') - : (c <= '\'' || c == '\\')) - : (c <= 'b' || (c < 'r' - ? (c < 'n' - ? c == 'f' - : c <= 'n') - : (c <= 'r' || (c >= 't' && c <= 'v'))))); -} +static TSCharacterRange sym_escape_sequence_character_set_1[] = { + {'\n', '\n'}, {'"', '"'}, {'\'', '\''}, {'0', '9'}, {'\\', '\\'}, {'a', 'b'}, {'f', 'f'}, {'n', 'n'}, + {'r', 'r'}, {'t', 'v'}, {'x', 'x'}, {'z', 'z'}, +}; static bool ts_lex(TSLexer *lexer, TSStateId state) { START_LEXER(); @@ -1580,39 +1571,40 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { switch (state) { case 0: if (eof) ADVANCE(20); - if (lookahead == '"') ADVANCE(39); - if (lookahead == '#') ADVANCE(76); - if (lookahead == '%') ADVANCE(73); - if (lookahead == '&') ADVANCE(65); - if (lookahead == '\'') ADVANCE(40); - if (lookahead == '(') ADVANCE(52); - if (lookahead == ')') ADVANCE(53); - if (lookahead == '*') ADVANCE(70); - if (lookahead == '+') ADVANCE(68); - if (lookahead == ',') ADVANCE(24); - if (lookahead == '-') ADVANCE(69); - if (lookahead == '.') ADVANCE(27); - if (lookahead == '/') ADVANCE(71); - if (lookahead == '0') ADVANCE(34); - if (lookahead == ':') ADVANCE(28); - if (lookahead == ';') ADVANCE(22); - if (lookahead == '<') ADVANCE(29); - if (lookahead == '=') ADVANCE(23); - if (lookahead == '>') ADVANCE(31); - if (lookahead == '[') ADVANCE(54); - if (lookahead == '\\') ADVANCE(6); - if (lookahead == ']') ADVANCE(55); - if (lookahead == '^') ADVANCE(75); - if (lookahead == '{') ADVANCE(56); - if (lookahead == '|') ADVANCE(62); - if (lookahead == '}') ADVANCE(57); - if (lookahead == '~') ADVANCE(64); + ADVANCE_MAP( + '"', 39, + '#', 76, + '%', 73, + '&', 65, + '\'', 40, + '(', 52, + ')', 53, + '*', 70, + '+', 68, + ',', 24, + '-', 69, + '.', 27, + '/', 71, + '0', 33, + ':', 28, + ';', 22, + '<', 29, + '=', 23, + '>', 31, + '[', 54, + '\\', 6, + ']', 55, + '^', 75, + '{', 56, + '|', 62, + '}', 57, + '~', 64, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(17) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(33); - if (lookahead != 0 && - lookahead > 31 && - (lookahead < 127 || 159 < lookahead)) ADVANCE(77); + lookahead == ' ') SKIP(17); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(34); + if (lookahead > ' ' && + (lookahead < '{' || 0x9f < lookahead)) ADVANCE(77); END_STATE(); case 1: if (lookahead == '"') ADVANCE(39); @@ -1648,7 +1640,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'x') ADVANCE(16); if (lookahead == 'z') ADVANCE(48); if (('0' <= lookahead && lookahead <= '9')) ADVANCE(50); - if (sym_escape_sequence_character_set_1(lookahead)) ADVANCE(47); + if (set_contains(sym_escape_sequence_character_set_1, 12, lookahead)) ADVANCE(47); END_STATE(); case 7: if (lookahead == '{') ADVANCE(15); @@ -1697,99 +1689,102 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 17: if (eof) ADVANCE(20); - if (lookahead == '"') ADVANCE(39); - if (lookahead == '#') ADVANCE(76); - if (lookahead == '%') ADVANCE(73); - if (lookahead == '&') ADVANCE(65); - if (lookahead == '\'') ADVANCE(40); - if (lookahead == '(') ADVANCE(52); - if (lookahead == ')') ADVANCE(53); - if (lookahead == '*') ADVANCE(70); - if (lookahead == '+') ADVANCE(68); - if (lookahead == ',') ADVANCE(24); - if (lookahead == '-') ADVANCE(69); - if (lookahead == '.') ADVANCE(27); - if (lookahead == '/') ADVANCE(71); - if (lookahead == '0') ADVANCE(34); - if (lookahead == ':') ADVANCE(28); - if (lookahead == ';') ADVANCE(22); - if (lookahead == '<') ADVANCE(29); - if (lookahead == '=') ADVANCE(23); - if (lookahead == '>') ADVANCE(31); - if (lookahead == '[') ADVANCE(54); - if (lookahead == ']') ADVANCE(55); - if (lookahead == '^') ADVANCE(75); - if (lookahead == '{') ADVANCE(56); - if (lookahead == '|') ADVANCE(62); - if (lookahead == '}') ADVANCE(57); - if (lookahead == '~') ADVANCE(64); + ADVANCE_MAP( + '"', 39, + '#', 76, + '%', 73, + '&', 65, + '\'', 40, + '(', 52, + ')', 53, + '*', 70, + '+', 68, + ',', 24, + '-', 69, + '.', 27, + '/', 71, + '0', 33, + ':', 28, + ';', 22, + '<', 29, + '=', 23, + '>', 31, + '[', 54, + ']', 55, + '^', 75, + '{', 56, + '|', 62, + '}', 57, + '~', 64, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(17) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(33); - if (lookahead != 0 && - lookahead > 31 && - lookahead != '\\' && - (lookahead < 127 || 159 < lookahead)) ADVANCE(77); + lookahead == ' ') SKIP(17); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(34); + if (lookahead > ' ' && + (lookahead < '[' || '^' < lookahead) && + (lookahead < '{' || 0x9f < lookahead)) ADVANCE(77); END_STATE(); case 18: if (eof) ADVANCE(20); - if (lookahead == '"') ADVANCE(39); - if (lookahead == '#') ADVANCE(76); - if (lookahead == '\'') ADVANCE(40); - if (lookahead == '(') ADVANCE(52); - if (lookahead == ')') ADVANCE(53); - if (lookahead == '-') ADVANCE(69); - if (lookahead == '.') ADVANCE(3); - if (lookahead == '0') ADVANCE(34); - if (lookahead == ';') ADVANCE(22); - if (lookahead == '>') ADVANCE(30); - if (lookahead == '[') ADVANCE(54); - if (lookahead == '{') ADVANCE(56); - if (lookahead == '}') ADVANCE(57); - if (lookahead == '~') ADVANCE(63); + ADVANCE_MAP( + '"', 39, + '#', 76, + '\'', 40, + '(', 52, + ')', 53, + '-', 69, + '.', 3, + '0', 33, + ';', 22, + '>', 30, + '[', 54, + '{', 56, + '}', 57, + '~', 63, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(18) - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(33); - if (lookahead != 0 && - lookahead > 31 && - (lookahead < '%' || '=' < lookahead) && - (lookahead < '\\' || '^' < lookahead) && - (lookahead < '|' || 159 < lookahead)) ADVANCE(77); + lookahead == ' ') SKIP(18); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(34); + if (lookahead > ' ' && + (lookahead < '%' || '>' < lookahead) && + (lookahead < '[' || '^' < lookahead) && + (lookahead < '{' || 0x9f < lookahead)) ADVANCE(77); END_STATE(); case 19: if (eof) ADVANCE(20); - if (lookahead == '"') ADVANCE(39); - if (lookahead == '#') ADVANCE(21); - if (lookahead == '%') ADVANCE(73); - if (lookahead == '&') ADVANCE(65); - if (lookahead == '\'') ADVANCE(40); - if (lookahead == '(') ADVANCE(52); - if (lookahead == ')') ADVANCE(53); - if (lookahead == '*') ADVANCE(70); - if (lookahead == '+') ADVANCE(68); - if (lookahead == ',') ADVANCE(24); - if (lookahead == '-') ADVANCE(69); - if (lookahead == '.') ADVANCE(26); - if (lookahead == '/') ADVANCE(71); - if (lookahead == ':') ADVANCE(28); - if (lookahead == ';') ADVANCE(22); - if (lookahead == '<') ADVANCE(29); - if (lookahead == '=') ADVANCE(23); - if (lookahead == '>') ADVANCE(31); - if (lookahead == '[') ADVANCE(54); - if (lookahead == ']') ADVANCE(55); - if (lookahead == '^') ADVANCE(75); - if (lookahead == '{') ADVANCE(56); - if (lookahead == '|') ADVANCE(62); - if (lookahead == '}') ADVANCE(57); - if (lookahead == '~') ADVANCE(64); + ADVANCE_MAP( + '"', 39, + '#', 21, + '%', 73, + '&', 65, + '\'', 40, + '(', 52, + ')', 53, + '*', 70, + '+', 68, + ',', 24, + '-', 69, + '.', 26, + '/', 71, + ':', 28, + ';', 22, + '<', 29, + '=', 23, + '>', 31, + '[', 54, + ']', 55, + '^', 75, + '{', 56, + '|', 62, + '}', 57, + '~', 64, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(19) - if (lookahead != 0 && - lookahead > 31 && - (lookahead < '0' || '9' < lookahead) && - lookahead != '\\' && - (lookahead < 127 || 159 < lookahead)) ADVANCE(77); + lookahead == ' ') SKIP(19); + if (lookahead > ' ' && + (lookahead < '%' || '>' < lookahead) && + (lookahead < '[' || '^' < lookahead) && + (lookahead < '{' || 0x9f < lookahead)) ADVANCE(77); END_STATE(); case 20: ACCEPT_TOKEN(ts_builtin_sym_end); @@ -1843,43 +1838,49 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 33: ACCEPT_TOKEN(sym_number); - if (lookahead == '.') ADVANCE(36); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(9); - if (lookahead == 'I' || - lookahead == 'i') ADVANCE(32); - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(10); - if (lookahead == 'U' || - lookahead == 'u') ADVANCE(11); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(33); + ADVANCE_MAP( + '.', 36, + 'E', 9, + 'e', 9, + 'I', 32, + 'i', 32, + 'L', 10, + 'l', 10, + 'U', 11, + 'u', 11, + 'X', 5, + 'x', 5, + ); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(34); END_STATE(); case 34: ACCEPT_TOKEN(sym_number); - if (lookahead == '.') ADVANCE(36); - if (lookahead == 'E' || - lookahead == 'e') ADVANCE(9); - if (lookahead == 'I' || - lookahead == 'i') ADVANCE(32); - if (lookahead == 'X' || - lookahead == 'x') ADVANCE(5); - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(10); - if (lookahead == 'U' || - lookahead == 'u') ADVANCE(11); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(33); + ADVANCE_MAP( + '.', 36, + 'E', 9, + 'e', 9, + 'I', 32, + 'i', 32, + 'L', 10, + 'l', 10, + 'U', 11, + 'u', 11, + ); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(34); END_STATE(); case 35: ACCEPT_TOKEN(sym_number); - if (lookahead == '.') ADVANCE(37); - if (lookahead == 'I' || - lookahead == 'i') ADVANCE(32); - if (lookahead == 'P' || - lookahead == 'p') ADVANCE(9); - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(10); - if (lookahead == 'U' || - lookahead == 'u') ADVANCE(11); + ADVANCE_MAP( + '.', 37, + 'I', 32, + 'i', 32, + 'L', 10, + 'l', 10, + 'P', 9, + 'p', 9, + 'U', 11, + 'u', 11, + ); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || ('a' <= lookahead && lookahead <= 'f')) ADVANCE(35); @@ -2057,14 +2058,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 77: ACCEPT_TOKEN(sym_identifier); - if (lookahead != 0 && - lookahead > ' ' && + if (lookahead > ' ' && lookahead != '"' && lookahead != '#' && (lookahead < '%' || '/' < lookahead) && (lookahead < ':' || '>' < lookahead) && (lookahead < '[' || '^' < lookahead) && - (lookahead < '{' || 159 < lookahead)) ADVANCE(77); + (lookahead < '{' || 0x9f < lookahead)) ADVANCE(77); END_STATE(); case 78: ACCEPT_TOKEN(anon_sym_DASH_DASH); @@ -2079,11 +2079,11 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(aux_sym_comment_token1); if (lookahead == '-') ADVANCE(81); if (lookahead == '\t' || - lookahead == 11 || + lookahead == 0x0b || lookahead == '\f' || lookahead == ' ') ADVANCE(80); if (lookahead != 0 && - (lookahead < '\n' || '\r' < lookahead)) ADVANCE(82); + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(82); END_STATE(); case 81: ACCEPT_TOKEN(aux_sym_comment_token1); @@ -2108,22 +2108,24 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (lookahead == 'a') ADVANCE(1); - if (lookahead == 'b') ADVANCE(2); - if (lookahead == 'd') ADVANCE(3); - if (lookahead == 'e') ADVANCE(4); - if (lookahead == 'f') ADVANCE(5); - if (lookahead == 'g') ADVANCE(6); - if (lookahead == 'i') ADVANCE(7); - if (lookahead == 'l') ADVANCE(8); - if (lookahead == 'n') ADVANCE(9); - if (lookahead == 'o') ADVANCE(10); - if (lookahead == 'r') ADVANCE(11); - if (lookahead == 't') ADVANCE(12); - if (lookahead == 'u') ADVANCE(13); - if (lookahead == 'w') ADVANCE(14); + ADVANCE_MAP( + 'a', 1, + 'b', 2, + 'd', 3, + 'e', 4, + 'f', 5, + 'g', 6, + 'i', 7, + 'l', 8, + 'n', 9, + 'o', 10, + 'r', 11, + 't', 12, + 'u', 13, + 'w', 14, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') SKIP(0) + lookahead == ' ') SKIP(0); END_STATE(); case 1: if (lookahead == 'n') ADVANCE(15); @@ -12154,7 +12156,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [7] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 0), + [7] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 0, 0, 0), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), @@ -12170,45 +12172,45 @@ static const TSParseActionEntry ts_parse_actions[] = { [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(185), [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bracket_index_expression, 4, .production_id = 23), - [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bracket_index_expression, 4, .production_id = 23), - [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dot_index_expression, 3, .production_id = 23), - [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dot_index_expression, 3, .production_id = 23), - [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 1), - [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 1), - [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__quote_string, 3, .production_id = 28), - [53] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__quote_string, 3, .production_id = 28), - [55] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 4), - [57] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 4), - [59] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, .production_id = 10), - [61] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, .production_id = 10), - [63] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 1), - [65] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 1), - [67] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), - [69] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), - [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__prefix_expression, 1), - [73] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__prefix_expression, 1), - [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3), - [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3), - [79] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 3), - [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 3), - [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 1, .production_id = 6), - [85] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 1, .production_id = 6), - [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 2), - [89] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 2), - [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__quote_string, 2, .production_id = 14), - [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__quote_string, 2, .production_id = 14), - [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_table_constructor, 2), - [97] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_table_constructor, 2), - [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block_string, 3, .production_id = 12), - [101] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block_string, 3, .production_id = 12), - [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_table_constructor, 3), - [105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_table_constructor, 3), - [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, .production_id = 16), - [109] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 16), + [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bracket_index_expression, 4, 0, 23), + [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bracket_index_expression, 4, 0, 23), + [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dot_index_expression, 3, 0, 23), + [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dot_index_expression, 3, 0, 23), + [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 1, 0, 0), + [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 1, 0, 0), + [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__quote_string, 3, 0, 28), + [53] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__quote_string, 3, 0, 28), + [55] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 4, 0, 0), + [57] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 4, 0, 0), + [59] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 10), + [61] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 10), + [63] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 1, 0, 0), + [65] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 1, 0, 0), + [67] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [69] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__prefix_expression, 1, 0, 0), + [73] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__prefix_expression, 1, 0, 0), + [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, 0, 0), + [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, 0, 0), + [79] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 3, 0, 0), + [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 3, 0, 0), + [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 1, 0, 6), + [85] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 1, 0, 6), + [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arguments, 2, 0, 0), + [89] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arguments, 2, 0, 0), + [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__quote_string, 2, 0, 14), + [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__quote_string, 2, 0, 14), + [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_table_constructor, 2, 0, 0), + [97] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_table_constructor, 2, 0, 0), + [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block_string, 3, 0, 12), + [101] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block_string, 3, 0, 12), + [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_table_constructor, 3, 0, 0), + [105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_table_constructor, 3, 0, 0), + [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 16), + [109] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 16), [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, .production_id = 29), - [115] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, .production_id = 29), + [113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 29), + [115] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 29), [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), @@ -12221,53 +12223,53 @@ static const TSParseActionEntry ts_parse_actions[] = { [135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), [137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), [139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), - [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_body, 3, .production_id = 41), - [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__function_body, 3, .production_id = 41), - [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_body, 2, .production_id = 27), - [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__function_body, 2, .production_id = 27), - [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 2, .production_id = 13), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 2, .production_id = 13), + [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_body, 3, 0, 41), + [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__function_body, 3, 0, 41), + [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_body, 2, 0, 27), + [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__function_body, 2, 0, 27), + [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 2, 0, 13), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 2, 0, 13), [153] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), [155] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), [157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), [159] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block, 1), - [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2), - [165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(4), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), - [170] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(129), - [173] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(258), - [176] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(131), - [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(256), - [182] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(53), - [185] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(90), - [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(48), - [191] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(93), - [194] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(184), - [197] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(170), - [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(185), - [203] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2), SHIFT_REPEAT(94), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_explist, 1, .production_id = 15), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignment_explist, 1, .production_id = 15), + [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block, 1, 0, 0), + [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), + [165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), + [170] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(129), + [173] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(258), + [176] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(131), + [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(256), + [182] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(53), + [185] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(90), + [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(48), + [191] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(93), + [194] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(184), + [197] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(170), + [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(185), + [203] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 2, 0, 0), SHIFT_REPEAT(94), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_explist, 1, 0, 15), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignment_explist, 1, 0, 15), [210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), [212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elseif_statement, 3, .production_id = 30), - [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, .production_id = 50), - [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, .production_id = 50), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elseif_statement, 3, 0, 30), + [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, 0, 50), + [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, 0, 50), [220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_repeat_statement, 3, .production_id = 18), - [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_repeat_statement, 3, .production_id = 18), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_repeat_statement, 3, 0, 18), + [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_repeat_statement, 3, 0, 18), [226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_statement, 1), - [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_repeat_statement, 4, .production_id = 31), - [232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_repeat_statement, 4, .production_id = 31), + [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_statement, 1, 0, 0), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_repeat_statement, 4, 0, 31), + [232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_repeat_statement, 4, 0, 31), [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 2), - [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 1), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 2, 0, 0), + [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 1, 0, 0), [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 1), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 1, 0, 0), [248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(199), [250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), @@ -12281,121 +12283,121 @@ static const TSParseActionEntry ts_parse_actions[] = { [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 3), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), - [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 2), + [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 3, 0, 0), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1, 0, 0), + [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 2, 0, 0), [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_list, 1), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_list, 1, 0, 0), [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__expression_list, 1), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__expression_list, 1, 0, 0), [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__expression_list_repeat1, 2), - [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__expression_list_repeat1, 2), - [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1), - [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1), - [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 5, .production_id = 56), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 1, .production_id = 15), - [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 1, .production_id = 4), - [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 1, .production_id = 4), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__expression_list_repeat1, 2, 0, 0), + [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__expression_list_repeat1, 2, 0, 0), + [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 5, 0, 56), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 1, 0, 15), + [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 1, 0, 4), + [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 1, 0, 4), [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 3, .production_id = 42), + [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field, 3, 0, 42), [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_numeric_clause, 5, .production_id = 55), - [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, .production_id = 25), - [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 2, .production_id = 25), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_numeric_clause, 5, 0, 55), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, 0, 25), + [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 2, 0, 25), [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 2, .production_id = 21), - [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 2, .production_id = 21), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 2, .production_id = 20), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 2, .production_id = 20), + [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 2, 0, 21), + [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 2, 0, 21), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 2, 0, 20), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 2, 0, 20), [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 3, .production_id = 36), - [340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 3, .production_id = 36), - [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, .production_id = 37), - [344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 2, .production_id = 37), - [346] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, .production_id = 37), SHIFT_REPEAT(217), + [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__att_name_list, 3, 0, 36), + [340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__att_name_list, 3, 0, 36), + [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, 0, 37), + [344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 2, 0, 37), + [346] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 2, 0, 37), SHIFT_REPEAT(217), [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [357] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_numeric_clause, 7, .production_id = 58), + [357] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_numeric_clause, 7, 0, 58), [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [361] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, .production_id = 51), - [363] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, .production_id = 51), - [365] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, .production_id = 51), SHIFT_REPEAT(78), - [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 3, .production_id = 49), - [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 3, .production_id = 49), - [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_explist, 2, .production_id = 39), - [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignment_explist, 2, .production_id = 39), - [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__attrib, 3), - [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__attrib, 3), - [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 2, .production_id = 9), - [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 2, .production_id = 9), + [361] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, 0, 51), + [363] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, 0, 51), + [365] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignment_explist_repeat1, 2, 0, 51), SHIFT_REPEAT(78), + [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__att_name_list_repeat1, 3, 0, 49), + [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__att_name_list_repeat1, 3, 0, 49), + [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_explist, 2, 0, 39), + [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignment_explist, 2, 0, 39), + [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__attrib, 3, 0, 0), + [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__attrib, 3, 0, 0), + [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 2, 0, 9), + [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 2, 0, 9), [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 45), - [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 45), - [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, .production_id = 2), - [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, .production_id = 2), - [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 3, .production_id = 19), - [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 3, .production_id = 19), - [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 57), - [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 57), - [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_empty_statement, 1), - [404] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_empty_statement, 1), - [406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 44), - [408] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 44), - [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 54), - [412] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 54), - [414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_goto_statement, 2), - [416] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_goto_statement, 2), - [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 2), - [420] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 2), - [422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 53), - [424] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 53), - [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_statement, 3, .production_id = 22), - [428] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_statement, 3, .production_id = 22), - [430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__local_variable_assignment, 3, .production_id = 38), - [432] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__local_variable_assignment, 3, .production_id = 38), - [434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 52), - [436] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 52), - [438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 2), - [440] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 2), - [442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__local_function_declaration, 4, .production_id = 35), - [444] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__local_function_declaration, 4, .production_id = 35), - [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 3, .production_id = 17), - [448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 3, .production_id = 17), - [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_statement, 3), - [452] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_statement, 3), - [454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 4, .production_id = 33), - [456] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 4, .production_id = 33), - [458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 5, .production_id = 48), - [460] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 5, .production_id = 48), - [462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 30), - [464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 30), - [466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 30), - [468] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 30), - [470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 43), - [472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 43), - [474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 1), - [476] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 1), - [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, .production_id = 1), - [480] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, .production_id = 1), - [482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1), - [484] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1), - [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 46), - [488] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 46), - [490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, .production_id = 3), - [492] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, .production_id = 3), - [494] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__field_sep, 1), - [496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_sep, 1), - [498] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameters, 3, .production_id = 40), - [500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3, .production_id = 40), - [502] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameters, 2), - [504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), + [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 45), + [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 45), + [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, 0, 2), + [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, 0, 2), + [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 3, 0, 19), + [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_declaration, 3, 0, 19), + [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, 0, 57), + [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, 0, 57), + [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_empty_statement, 1, 0, 0), + [404] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_empty_statement, 1, 0, 0), + [406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 44), + [408] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 44), + [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 54), + [412] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 54), + [414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_goto_statement, 2, 0, 0), + [416] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_goto_statement, 2, 0, 0), + [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 2, 0, 0), + [420] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 2, 0, 0), + [422] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 53), + [424] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 53), + [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_statement, 3, 0, 22), + [428] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_statement, 3, 0, 22), + [430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__local_variable_assignment, 3, 0, 38), + [432] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__local_variable_assignment, 3, 0, 38), + [434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 52), + [436] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 52), + [438] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_declaration, 2, 0, 0), + [440] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_declaration, 2, 0, 0), + [442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__local_function_declaration, 4, 0, 35), + [444] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__local_function_declaration, 4, 0, 35), + [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_statement, 3, 0, 17), + [448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_statement, 3, 0, 17), + [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_statement, 3, 0, 0), + [452] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_statement, 3, 0, 0), + [454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 4, 0, 33), + [456] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 4, 0, 33), + [458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 5, 0, 48), + [460] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 5, 0, 48), + [462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, 0, 30), + [464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, 0, 30), + [466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, 0, 30), + [468] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, 0, 30), + [470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, 0, 43), + [472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, 0, 43), + [474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_chunk_repeat1, 1, 0, 0), + [476] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_chunk_repeat1, 1, 0, 0), + [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 1), + [480] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 1), + [482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, 0, 0), + [484] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, 0, 0), + [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 46), + [488] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 46), + [490] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1, 0, 3), + [492] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration, 1, 0, 3), + [494] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__field_sep, 1, 0, 0), + [496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_sep, 1, 0, 0), + [498] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameters, 3, 0, 40), + [500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3, 0, 40), + [502] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parameters, 2, 0, 0), + [504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2, 0, 0), [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), @@ -12404,87 +12406,87 @@ static const TSParseActionEntry ts_parse_actions[] = { [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_varlist, 1, .production_id = 4), + [522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_varlist, 1, 0, 4), [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, .production_id = 25), - [528] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__expression_list_repeat1, 2), SHIFT_REPEAT(91), + [526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, 0, 25), + [528] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__expression_list_repeat1, 2, 0, 0), SHIFT_REPEAT(91), [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [533] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_list, 2), - [535] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__expression_list, 2), + [533] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_list, 2, 0, 0), + [535] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__expression_list, 2, 0, 0), [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [545] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), + [545] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2, 0, 0), [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 2), - [551] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__field_list_repeat1, 2), SHIFT_REPEAT(153), - [554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__field_list_repeat1, 2), - [556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_index_expression, 3, .production_id = 24), + [549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 2, 0, 0), + [551] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__field_list_repeat1, 2, 0, 0), SHIFT_REPEAT(153), + [554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__field_list_repeat1, 2, 0, 0), + [556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_index_expression, 3, 0, 24), [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 47), - [564] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 47), SHIFT_REPEAT(92), - [567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 47), - [569] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 3), - [571] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 3), - [573] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 1), + [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 47), + [564] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 47), SHIFT_REPEAT(92), + [567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 47), + [569] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 3, 0, 0), + [571] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_return_statement, 3, 0, 0), + [573] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__field_list, 1, 0, 0), [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), [579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(259), - [581] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, .production_id = 26), SHIFT_REPEAT(223), - [584] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, .production_id = 26), + [581] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, 0, 26), SHIFT_REPEAT(223), + [584] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, 0, 26), [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), [592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), [594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block, 2), - [600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block, 2), + [598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block, 2, 0, 0), + [600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__block, 2, 0, 0), [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), [604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), [608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__name_list, 1, .production_id = 4), - [616] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__doublequote_string_content, 2), - [618] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__doublequote_string_content, 2), SHIFT_REPEAT(206), - [621] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block, 1), - [623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__singlequote_string_content, 2), - [625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__singlequote_string_content, 2), SHIFT_REPEAT(207), + [614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__name_list, 1, 0, 4), + [616] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__doublequote_string_content, 2, 0, 0), + [618] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__doublequote_string_content, 2, 0, 0), SHIFT_REPEAT(206), + [621] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__block, 1, 0, 0), + [623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__singlequote_string_content, 2, 0, 0), + [625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__singlequote_string_content, 2, 0, 0), SHIFT_REPEAT(207), [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name, 1), + [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name, 1, 0, 0), [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 32), - [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 32), - [640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, .production_id = 25), + [636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, 0, 32), + [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, 0, 32), + [640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__name_list_repeat1, 2, 0, 25), [642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [646] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 2, .production_id = 11), - [648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elseif_statement, 4, .production_id = 44), - [650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elseif_statement, 4, .production_id = 44), - [652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_prefix_expression, 1), - [654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_prefix_expression, 1, .production_id = 7), - [656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_varlist, 2, .production_id = 11), + [646] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 2, 0, 11), + [648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elseif_statement, 4, 0, 44), + [650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elseif_statement, 4, 0, 44), + [652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_prefix_expression, 1, 0, 0), + [654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_prefix_expression, 1, 0, 7), + [656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignment_varlist, 2, 0, 11), [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), - [660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 1, .production_id = 4), - [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__doublequote_string_content, 1), - [664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__doublequote_string_content, 1), - [666] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__singlequote_string_content, 1), - [668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__singlequote_string_content, 1), - [670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_dot_index_expression, 3, .production_id = 23), - [672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__name_list, 2, .production_id = 11), - [674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, .production_id = 26), - [676] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, .production_id = 26), SHIFT_REPEAT(161), + [660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 1, 0, 4), + [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__doublequote_string_content, 1, 0, 0), + [664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__doublequote_string_content, 1, 0, 0), + [666] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__singlequote_string_content, 1, 0, 0), + [668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__singlequote_string_content, 1, 0, 0), + [670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_dot_index_expression, 3, 0, 23), + [672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__name_list, 2, 0, 11), + [674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, 0, 26), + [676] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignment_varlist_repeat1, 2, 0, 26), SHIFT_REPEAT(161), [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), [681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), [683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 3), + [685] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chunk, 3, 0, 0), [687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [689] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_statement, 2, .production_id = 17), + [689] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_statement, 2, 0, 17), [691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), [693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), [695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), @@ -12493,21 +12495,21 @@ static const TSParseActionEntry ts_parse_actions[] = { [701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), [703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), [705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_generic_clause, 3, .production_id = 34), + [707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_generic_clause, 3, 0, 34), [709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), [711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), [713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 3, .production_id = 4), + [715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 3, 0, 4), [717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [719] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 1), + [719] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 1, 0, 0), [721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), [723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name, 1, .production_id = 8), - [729] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_method_index_expression, 3, .production_id = 24), + [727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name, 1, 0, 8), + [729] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__function_name_method_index_expression, 3, 0, 24), [731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), [733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [735] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 4, .production_id = 11), + [735] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameter_list, 4, 0, 11), [737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), [739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), [741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), @@ -12525,8 +12527,8 @@ static const TSParseActionEntry ts_parse_actions[] = { [765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), [767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), [769] = {.entry = {.count = 1, .reusable = false}}, SHIFT(260), - [771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, .production_id = 5), - [773] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, .production_id = 12), + [771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, 0, 5), + [773] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 12), }; enum ts_external_scanner_symbol_identifiers { @@ -12590,13 +12592,15 @@ bool tree_sitter_lua_external_scanner_scan(void *, TSLexer *, const bool *); unsigned tree_sitter_lua_external_scanner_serialize(void *, char *); void tree_sitter_lua_external_scanner_deserialize(void *, const char *, unsigned); -#ifdef _WIN32 +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) #define TS_PUBLIC __declspec(dllexport) #else #define TS_PUBLIC __attribute__((visibility("default"))) #endif -TS_PUBLIC const TSLanguage *tree_sitter_lua() { +TS_PUBLIC const TSLanguage *tree_sitter_lua(void) { static const TSLanguage language = { .version = LANGUAGE_VERSION, .symbol_count = SYMBOL_COUNT, diff --git a/src/scanner.c b/src/scanner.c index d2bf68d..58db18b 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -1,5 +1,5 @@ #include -#include +#include "tree_sitter/parser.h" #include enum TokenType { diff --git a/src/tree_sitter/array.h b/src/tree_sitter/array.h index 186ba67..15a3b23 100644 --- a/src/tree_sitter/array.h +++ b/src/tree_sitter/array.h @@ -66,9 +66,12 @@ extern "C" { /// Increase the array's size by `count` elements. /// New elements are zero-initialized. #define array_grow_by(self, count) \ - (_array__grow((Array *)(self), count, array_elem_size(self)), \ - memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)), \ - (self)->size += (count)) + do { \ + if ((count) == 0) break; \ + _array__grow((Array *)(self), count, array_elem_size(self)); \ + memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ + (self)->size += (count); \ + } while (0) /// Append all elements from one array to the end of another. #define array_push_all(self, other) \ diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h index 17b4fde..799f599 100644 --- a/src/tree_sitter/parser.h +++ b/src/tree_sitter/parser.h @@ -47,6 +47,7 @@ struct TSLexer { uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); + void (*log)(const TSLexer *, const char *, ...); }; typedef enum { @@ -86,6 +87,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 +131,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 +178,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 +238,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() \