diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..bff29e6 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["--cfg", "tokio_unstable"] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..b03c3f5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,12 @@ +name: Test +on: [push, pull_request] + +jobs: + test: + name: cargo test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - run: cargo test + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ab10ba8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +target/ +output/ +**/__pycache__/ +**/*.wasm +**/.DS_Store +node_modules/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..a9be476 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3370 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "ammonia" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170" +dependencies = [ + "html5ever", + "maplit", + "once_cell", + "tendril", + "url", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "aqua" +version = "0.0.0" +dependencies = [ + "anyhow", + "built", + "compiler", + "config", + "repl", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "aqua-ls" +version = "0.0.0" +dependencies = [ + "compiler", + "lsp-server", + "lsp-types", + "serde", + "serde_json", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "ariadne" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd002a6223f12c7a95cdd4b1cb3a0149d22d37f7a9ecdb2cb691a071fe236c29" +dependencies = [ + "unicode-width", + "yansi", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "bitmask-enum" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9990737a6d5740ff51cdbbc0f0503015cb30c390f6623968281eb214a520cfc0" +dependencies = [ + "quote", + "syn 2.0.48", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "regex-automata 0.4.5", + "serde", +] + +[[package]] +name = "btree-slab" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c" +dependencies = [ + "cc-traits", + "slab", + "smallvec", +] + +[[package]] +name = "built" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d17f4d6e4dc36d1a02fbedc2753a096848e7c1b0772f7654eab8e2c927dd53" +dependencies = [ + "chrono", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cc-traits" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5" +dependencies = [ + "slab", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.0", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", + "terminal_size", +] + +[[package]] +name = "clap_complete" +version = "4.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "clipboard-win" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ec832972fefb8cf9313b45a0d1945e29c9c251f1d4c6eafc5fe2124c02d2e81" +dependencies = [ + "error-code", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "compiler" +version = "0.0.0" +dependencies = [ + "ariadne", + "bitmask-enum", + "config", + "egg", + "ena", + "indoc", + "libffi", + "runtime", + "serde", + "serde_json", + "similar", + "smol_str", + "stacker", +] + +[[package]] +name = "compiler-fuzz" +version = "0.0.0" +dependencies = [ + "compiler", + "libfuzzer-sys", +] + +[[package]] +name = "config" +version = "0.0.0" +dependencies = [ + "clap", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "egg" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96beaf9d35dbc4686bc86a4ecb851fd6a406f0bf32d9f646b1225a5c5cf5b5d7" +dependencies = [ + "env_logger 0.9.3", + "fxhash", + "hashbrown 0.12.3", + "indexmap 1.9.3", + "instant", + "log", + "smallvec", + "symbol_table", + "symbolic_expressions", + "thiserror", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "elasticlunr-rs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41e83863a500656dfa214fee6682de9c5b9f03de6860fec531235ed2ae9f6571" +dependencies = [ + "regex", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c012a26a7f605efc424dd53697843a72be7dc86ad2d01f7814337794a12231d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-code" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "281e452d3bad4005426416cdba5ccfd4f5c1280e10099e21db27f7c1c28347fc" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fd-lock" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" +dependencies = [ + "cfg-if", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.52.0", +] + +[[package]] +name = "flexbuffers" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d14128f06405808ce75bfebe11e9b0f9da18719ede6d7bdb1702d6bfe0f7e8" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "num_enum", + "serde", + "serde_derive", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.2.2", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "halfbrown" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5681137554ddff44396e5f149892c769d45301dd9aa19c51602a89ee214cb0ec" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "handlebars" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab283476b99e66691dee3f1640fea91487a8d81f50fb5ecc75538f8f8879a1e4" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.7", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.7", + "allocator-api2", +] + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.5", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "indoc" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "is-terminal" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "lasso" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4644821e1c3d7a560fe13d842d13f587c07348a1a05d3a797152d41c90c56df2" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libffi" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce826c243048e3d5cec441799724de52e2d42f820468431fc3fceee2341871e2" +dependencies = [ + "libc", + "libffi-sys", +] + +[[package]] +name = "libffi-sys" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36115160c57e8529781b4183c2bb51fdc1f6d6d1ed345591d84be7703befb3c" +dependencies = [ + "cc", +] + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lsp-server" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" +dependencies = [ + "crossbeam-channel", + "log", + "serde", + "serde_json", +] + +[[package]] +name = "lsp-types" +version = "0.95.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "macros" +version = "0.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "mdbook" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c33564061c3c640bed5ace7d6a2a1b65f2c64257d1ac930c15e94ed0fb561d3" +dependencies = [ + "ammonia", + "anyhow", + "chrono", + "clap", + "clap_complete", + "elasticlunr-rs", + "env_logger 0.11.2", + "futures-util", + "handlebars", + "ignore", + "log", + "memchr", + "notify", + "notify-debouncer-mini", + "once_cell", + "opener", + "pathdiff", + "pulldown-cmark", + "regex", + "serde", + "serde_json", + "shlex", + "tempfile", + "tokio", + "toml", + "topological-sort", + "warp", +] + +[[package]] +name = "mdbook-aqua" +version = "0.0.0" +dependencies = [ + "anyhow", + "colored", + "indoc", + "mdbook", + "regex", + "repl", + "serde_json", +] + +[[package]] +name = "mdbook-exec" +version = "0.0.0" +dependencies = [ + "anyhow", + "mdbook", + "regex", + "serde_json", +] + +[[package]] +name = "mdbook-grammar" +version = "0.0.0" +dependencies = [ + "anyhow", + "mdbook", + "regex", + "serde_json", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.2", + "cfg-if", + "libc", +] + +[[package]] +name = "normpath" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5831952a9476f2fed74b77d74182fa5ddc4d21c72ec45a333b250e3ed0272804" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.4.2", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "notify-debouncer-mini" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d40b221972a1fc5ef4d858a2f671fb34c75983eb385463dff3780eeff6a9d43" +dependencies = [ + "crossbeam-channel", + "log", + "notify", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opener" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788" +dependencies = [ + "bstr", + "normpath", + "winapi", +] + +[[package]] +name = "opt" +version = "0.0.0" +dependencies = [ + "egg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "pest_meta" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "pulldown-cmark" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce76ce678ffc8e5675b22aa1405de0b7037e2fdf8913fea40d1926c6fe1e6e7" +dependencies = [ + "bitflags 2.4.2", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d8f9aa0e3cbcfaf8bf00300004ee3b72f74770f9cbac93f6928771f613276b" + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "repl" +version = "0.0.0" +dependencies = [ + "anyhow", + "colored", + "compiler", + "regex", + "rustyline", +] + +[[package]] +name = "rmp" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "runtime" +version = "0.0.0" +dependencies = [ + "arrayvec", + "atoi", + "btree-slab", + "ciborium", + "criterion", + "csv-core", + "derive_more", + "flexbuffers", + "futures", + "halfbrown", + "itoa", + "lasso", + "lexical-parse-float", + "macros", + "num", + "rand", + "rmp", + "rustc-hash", + "ryu", + "serde", + "serde_derive", + "serde_json", + "smallstr", + "smallvec", + "smartstring", + "smol_str", + "tikv-jemallocator", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "rustyline" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +dependencies = [ + "bitflags 2.4.2", + "cfg-if", + "clipboard-win", + "fd-lock", + "home", + "libc", + "log", + "memchr", + "nix", + "radix_trie", + "rustyline-derive", + "unicode-segmentation", + "unicode-width", + "utf8parse", + "winapi", +] + +[[package]] +name = "rustyline-derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "similar" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallstr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b1aefdf380735ff8ded0b15f31aab05daf1f70216c01c02a12926badd1df9d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "serde", + "static_assertions", + "version_check", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "symbol_table" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32bf088d1d7df2b2b6711b06da3471bc86677383c57b27251e18c56df8deac14" +dependencies = [ + "ahash 0.7.7", + "hashbrown 0.12.3", +] + +[[package]] +name = "symbolic_expressions" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c68d531d83ec6c531150584c42a4290911964d5f0d79132b193b67252a23b71" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "futures-util", + "hashbrown 0.14.3", + "pin-project-lite", + "slab", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.2", + "toml_datetime", + "winnow", +] + +[[package]] +name = "topological-sort" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "warp" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "headers", + "http", + "hyper", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "rustls-pemfile", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" +dependencies = [ + "memchr", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4d62e4c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] +members = ["crates/*", "crates/compiler/fuzz"] +exclude = ["crates/tree-sitter-aqua"] +resolver = "2" + +[workspace.package] +version = "0.0.0" +edition = "2021" +authors = ["Aqua Team"] +readme = "README.md" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a840ab5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:20.04 + +# Set the noninteractive timezone (prevents configuration prompts) +ARG DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe/London + +# Set a working directory +WORKDIR /aqua + +# Install apt packages +RUN apt-get update && apt-get install -y \ + curl wget software-properties-common + +# Install Rust +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y +ENV PATH="/root/.cargo/bin:${PATH}" + +# Cleanup +RUN apt-get clean + +# Copy the Rust code into the image +COPY Cargo.toml /aqua/ +COPY Cargo.lock /aqua/ +COPY .cargo /aqua/.cargo +COPY crates /aqua/crates diff --git a/crates/.DS_Store b/crates/.DS_Store new file mode 100644 index 0000000..3627fe7 Binary files /dev/null and b/crates/.DS_Store differ diff --git a/crates/aqua-ls/Cargo.toml b/crates/aqua-ls/Cargo.toml new file mode 100644 index 0000000..a94ca4f --- /dev/null +++ b/crates/aqua-ls/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "aqua-ls" +version.workspace = true +edition.workspace = true + +[dependencies] +compiler = { path = "../compiler" } + +lsp-server = "0.7.6" +lsp-types = "0.95.0" +serde_json = "1.0.113" +serde = { version = "1.0.113", features = ["derive"] } diff --git a/crates/aqua-ls/src/main.rs b/crates/aqua-ls/src/main.rs new file mode 100644 index 0000000..5c7795d --- /dev/null +++ b/crates/aqua-ls/src/main.rs @@ -0,0 +1,91 @@ +use std::error::Error; + +use lsp_types::request::GotoDefinition; +use lsp_types::DiagnosticOptions; +use lsp_types::DiagnosticServerCapabilities; +use lsp_types::GotoDefinitionResponse; +use lsp_types::InitializeParams; +use lsp_types::ServerCapabilities; + +use lsp_server::Connection; +use lsp_server::ExtractError; +use lsp_server::Message; +use lsp_server::Request; +use lsp_server::RequestId; +use lsp_server::Response; + +fn main() -> Result<(), Box> { + let (connection, io_threads) = Connection::stdio(); + let server_capabilities = serde_json::to_value(ServerCapabilities { + diagnostic_provider: Some(DiagnosticServerCapabilities::Options(DiagnosticOptions { + identifier: None, + inter_file_dependencies: true, + workspace_diagnostics: false, + work_done_progress_options: lsp_types::WorkDoneProgressOptions { + work_done_progress: None, + }, + })), + ..ServerCapabilities::default() + }) + .unwrap(); + let initialization_params = match connection.initialize(server_capabilities) { + Ok(it) => it, + Err(e) => { + if e.channel_is_disconnected() { + io_threads.join()?; + } + return Err(e.into()); + } + }; + main_loop(connection, initialization_params)?; + io_threads.join()?; + Ok(()) +} + +fn main_loop( + connection: Connection, + params: serde_json::Value, +) -> Result<(), Box> { + let _params: InitializeParams = serde_json::from_value(params).unwrap(); + for msg in &connection.receiver { + match msg { + Message::Request(req) => { + if connection.handle_shutdown(&req)? { + return Ok(()); + } + match cast::(req) { + Ok((id, params)) => { + eprintln!("got gotoDefinition request #{id}: {params:?}"); + let result = Some(GotoDefinitionResponse::Array(Vec::new())); + let result = serde_json::to_value(&result).unwrap(); + let resp = Response { + id, + result: Some(result), + error: None, + }; + connection.sender.send(Message::Response(resp))?; + continue; + } + Err(err @ ExtractError::JsonError { .. }) => panic!("{err:?}"), + Err(ExtractError::MethodMismatch(req)) => req, + }; + // ... + } + Message::Response(resp) => { + eprintln!("got response: {resp:?}"); + } + Message::Notification(not) => { + eprintln!("got notification: {not:?}"); + } + } + } + Ok(()) +} + +fn cast(req: Request) -> Result<(RequestId, R::Params), ExtractError> +where + R: lsp_types::request::Request, + R::Params: serde::de::DeserializeOwned, +{ + req.extract(R::METHOD) +} diff --git a/crates/aqua/Cargo.toml b/crates/aqua/Cargo.toml new file mode 100644 index 0000000..ad01132 --- /dev/null +++ b/crates/aqua/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "aqua" +version.workspace = true +edition.workspace = true +build = "build.rs" + +[features] +default = ["repl"] + +[dependencies] +compiler = { path = "../compiler" } +repl = { path = "../repl", optional = true } +config = { path = "../config", features = ["clap"] } + +anyhow = { version = "1.0.79" } +tracing = { version = "0.1.40", features = ["release_max_level_warn"] } +tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } + +[build-dependencies] +built = { version = "0.7.1", features = ["chrono"] } diff --git a/crates/aqua/build.rs b/crates/aqua/build.rs new file mode 100644 index 0000000..4306bb7 --- /dev/null +++ b/crates/aqua/build.rs @@ -0,0 +1,3 @@ +fn main() { + built::write_built_file().expect("Failed to acquire build-time information") +} diff --git a/crates/aqua/src/input.rs b/crates/aqua/src/input.rs new file mode 100644 index 0000000..e8fbeb4 --- /dev/null +++ b/crates/aqua/src/input.rs @@ -0,0 +1,16 @@ +use anyhow::Result; +use std::path::Path; + +pub fn read_file(path: &Path) -> Result<(String, String)> { + let name = path.display().to_string(); + let source = std::fs::read_to_string(path)?; + if path.is_absolute() { + std::env::set_current_dir(path.parent().unwrap())?; + } else { + let mut relative_path = std::env::current_dir()?; + relative_path.push(path); + std::env::set_current_dir(relative_path.parent().unwrap())?; + } + tracing::info!("Updated cwd to: {}", std::env::current_dir()?.display()); + Ok((name, source)) +} diff --git a/crates/aqua/src/logging.rs b/crates/aqua/src/logging.rs new file mode 100644 index 0000000..4c4e0fa --- /dev/null +++ b/crates/aqua/src/logging.rs @@ -0,0 +1,19 @@ +use std::str::FromStr; + +use tracing_subscriber::prelude::*; + +#[cfg(debug_assertions)] +pub const FILTER: &str = "info,librdkafka=off,rdkafka::client=off"; + +#[cfg(not(debug_assertions))] +pub const FILTER: &str = "warn,librdkafka=off,rdkafka::client=off"; + +pub fn init() { + let fmt = tracing_subscriber::fmt::layer() + .with_file(false) + .with_line_number(false) + .compact() + .with_writer(std::io::stderr) + .with_filter(tracing_subscriber::filter::EnvFilter::from_str(FILTER).unwrap()); + tracing_subscriber::registry().with(fmt).init(); +} diff --git a/crates/aqua/src/main.rs b/crates/aqua/src/main.rs new file mode 100644 index 0000000..42f3c94 --- /dev/null +++ b/crates/aqua/src/main.rs @@ -0,0 +1,32 @@ +mod input; +mod logging; +mod version; + +use anyhow::Result; +use compiler::Compiler; +use config::Config; +use repl::Repl; + +fn main() -> Result<()> { + logging::init(); + + let config = Config::parse(); + + if config.version { + version::print(); + return Ok(()); + } + + let compiler = Compiler::new(config); + + if let Some(path) = &compiler.config.file { + let (_name, source) = input::read_file(path)?; + if compiler.config.interactive { + Repl::new(compiler).run(Some(source)) + } else { + todo!() + } + } else { + Repl::new(compiler).run(None) + } +} diff --git a/crates/aqua/src/version.rs b/crates/aqua/src/version.rs new file mode 100644 index 0000000..0002c34 --- /dev/null +++ b/crates/aqua/src/version.rs @@ -0,0 +1,10 @@ +pub fn print() { + mod build { + include!(concat!(env!("OUT_DIR"), "/built.rs")); + } + println!(" version: {}", build::PKG_VERSION); + println!(" target: {}", build::TARGET); + println!(" profile: {}", build::PROFILE); + println!("compiler: {}", build::RUSTC_VERSION); + println!(" time: {}", build::BUILT_TIME_UTC); +} diff --git a/crates/compiler/Cargo.lock b/crates/compiler/Cargo.lock new file mode 100644 index 0000000..d3d0f78 --- /dev/null +++ b/crates/compiler/Cargo.lock @@ -0,0 +1,104 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aqua" +version = "0.1.0" +dependencies = [ + "ariadne", + "indoc", + "smol_str", +] + +[[package]] +name = "ariadne" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd002a6223f12c7a95cdd4b1cb3a0149d22d37f7a9ecdb2cb691a071fe236c29" +dependencies = [ + "unicode-width", + "yansi", +] + +[[package]] +name = "indoc" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" diff --git a/crates/compiler/Cargo.toml b/crates/compiler/Cargo.toml new file mode 100644 index 0000000..21d0400 --- /dev/null +++ b/crates/compiler/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "compiler" +version.workspace = true +edition.workspace = true + +[dependencies] +config = { path = "../config" } +runtime = { path = "../runtime" } + +ariadne = "0.4.0" +smol_str = { version = "0.2.1", features = ["std"] } +stacker = "0.1.15" +ena = "0.14.2" +libffi = "3.2.0" +serde = { version = "1.0.130", features = ["derive"] } +# chumsky = "1.0.0-alpha.6" +bitmask-enum = "2.2.3" +egg = "0.9.5" + +[dev-dependencies] +indoc = "2.0.4" +similar = "2.4.0" +serde_json = "1.0.113" diff --git a/crates/compiler/fuzz/.gitignore b/crates/compiler/fuzz/.gitignore new file mode 100644 index 0000000..1a45eee --- /dev/null +++ b/crates/compiler/fuzz/.gitignore @@ -0,0 +1,4 @@ +target +corpus +artifacts +coverage diff --git a/crates/compiler/fuzz/Cargo.toml b/crates/compiler/fuzz/Cargo.toml new file mode 100644 index 0000000..95b8c86 --- /dev/null +++ b/crates/compiler/fuzz/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "compiler-fuzz" +version = "0.0.0" +publish = false +edition = "2021" + +[package.metadata] +cargo-fuzz = true + +[dependencies] +libfuzzer-sys = "0.4" +compiler = { path = ".." } + +[[bin]] +name = "fuzz_lexer" +path = "fuzz_targets/fuzz_lexer.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "fuzz_parser" +path = "fuzz_targets/fuzz_parser.rs" +test = false +doc = false +bench = false diff --git a/crates/compiler/fuzz/fuzz_targets/fuzz_lexer.rs b/crates/compiler/fuzz/fuzz_targets/fuzz_lexer.rs new file mode 100644 index 0000000..968e86b --- /dev/null +++ b/crates/compiler/fuzz/fuzz_targets/fuzz_lexer.rs @@ -0,0 +1,9 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; + +fuzz_target!(|data: &[u8]| { + if let Ok(s) = std::str::from_utf8(data) { + for _ in compiler::lexer::Lexer::new(0, s) {} + } +}); diff --git a/crates/compiler/fuzz/fuzz_targets/fuzz_parser.rs b/crates/compiler/fuzz/fuzz_targets/fuzz_parser.rs new file mode 100644 index 0000000..503d4eb --- /dev/null +++ b/crates/compiler/fuzz/fuzz_targets/fuzz_parser.rs @@ -0,0 +1,11 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; + +fuzz_target!(|data: &[u8]| { + if let Ok(s) = std::str::from_utf8(data) { + let lexer = compiler::lexer::Lexer::new(0, s); + let mut parser = compiler::parser::Parser::new(s, lexer); + parser.parse(); + } +}); diff --git a/crates/compiler/src/annotate.rs b/crates/compiler/src/annotate.rs new file mode 100644 index 0000000..804d559 --- /dev/null +++ b/crates/compiler/src/annotate.rs @@ -0,0 +1,483 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::PatArg; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::infer::Context; + +// Replace all holes with fresh type variables. +fn map(ts: &[T], f: impl FnMut(&T) -> T) -> Vec { + ts.iter().map(f).collect() +} + +impl Type { + pub fn annotate(&self, ctx: &mut Context) -> Type { + match self { + Type::Cons(x, ts) => { + let x = x.clone(); + let ts = map(ts, |t| t.annotate(ctx)); + Type::Cons(x, ts) + } + Type::Assoc(x0, ts0, x1, ts1) => { + let x0 = x0.clone(); + let ts0 = map(ts0, |t| t.annotate(ctx)); + let x1 = x1.clone(); + let ts1 = map(ts1, |t| t.annotate(ctx)); + Type::Assoc(x0, ts0, x1, ts1) + } + Type::Var(x) => { + let x = x.clone(); + Type::Var(x) + } + Type::Hole => ctx.new_tyvar(), + Type::Err => Type::Err, + Type::Generic(x) => { + let x = x.clone(); + Type::Generic(x) + } + Type::Fun(ts, t) => { + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + let t = Rc::new(t.annotate(ctx)); + Type::Fun(ts, t) + } + Type::Tuple(ts) => { + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + Type::Tuple(ts) + } + Type::Record(xts) => { + let xts = xts + .iter() + .map(|(x, t)| (x.clone(), t.annotate(ctx))) + .collect(); + Type::Record(xts) + } + Type::Alias(x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + Type::Alias(x, ts) + } + Type::Unresolved(p) => { + let p = p.annotate(ctx); + Type::Unresolved(p) + } + Type::Array(t, n) => { + let t = t.annotate(ctx); + let n = *n; + Type::Array(Rc::new(t), n) + } + Type::Never => Type::Never, + } + } +} + +impl UnresolvedPath { + pub fn annotate(&self, ctx: &mut Context) -> UnresolvedPath { + let segments = self + .segments + .iter() + .map(|(x, ts)| (x.clone(), ts.iter().map(|t| t.annotate(ctx)).collect())) + .collect(); + UnresolvedPath::new(segments) + } +} + +impl Program { + pub fn annotate(&self, ctx: &mut Context) -> Program { + let stmts = self.stmts.iter().map(|s| s.annotate(ctx)).collect(); + Program::new(stmts) + } +} + +impl Stmt { + pub fn annotate(&self, ctx: &mut Context) -> Stmt { + match self { + Stmt::Var(v) => { + let v = v.annotate(ctx); + Stmt::Var(v) + } + Stmt::Def(d) => { + let d = d.annotate(ctx); + Stmt::Def(d) + } + Stmt::Impl(i) => { + let i = i.annotate(ctx); + Stmt::Impl(i) + } + Stmt::Expr(e) => { + let e = e.annotate(ctx); + Stmt::Expr(e) + } + Stmt::Struct(s) => { + let s = s.annotate(ctx); + Stmt::Struct(s) + } + Stmt::Enum(e) => { + let e = e.annotate(ctx); + Stmt::Enum(e) + } + Stmt::Type(s) => { + let s = s.annotate(ctx); + Stmt::Type(s) + } + Stmt::Trait(s) => { + let s = s.annotate(ctx); + Stmt::Trait(s) + } + Stmt::Err(_) => todo!(), + } + } +} + +impl StmtStruct { + pub fn annotate(&self, ctx: &mut Context) -> StmtStruct { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let fields = self + .fields + .iter() + .map(|(x, t)| (x.clone(), t.annotate(ctx))) + .collect(); + StmtStruct::new(span, name, generics, fields) + } +} + +impl StmtType { + pub fn annotate(&self, ctx: &mut Context) -> StmtType { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let ty = self.ty.annotate(ctx); + StmtType::new(span, name, generics, ty) + } +} + +impl StmtEnum { + pub fn annotate(&self, ctx: &mut Context) -> StmtEnum { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let variants = self + .variants + .iter() + .map(|(x, t)| (x.clone(), t.annotate(ctx))) + .collect(); + StmtEnum::new(span, name, generics, variants) + } +} + +impl StmtVar { + pub fn annotate(&self, ctx: &mut Context) -> StmtVar { + let span = self.span; + let x = self.name.clone(); + let t = self.ty.annotate(ctx); + let e = self.expr.annotate(ctx); + StmtVar::new(span, x, t, e) + } +} + +impl StmtDef { + pub fn annotate(&self, ctx: &mut Context) -> StmtDef { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let preds = self.where_clause.iter().map(|p| p.annotate(ctx)).collect(); + let params = self.params.iter().map(|p| p.annotate(ctx)).collect(); + let ty = self.ty.annotate(ctx); + let body = self.body.annotate(ctx); + StmtDef::new(span, name, generics, preds, params, ty, body) + } +} + +impl Body { + pub fn annotate(&self, ctx: &mut Context) -> Body { + match self { + Body::Expr(e) => { + let e = e.annotate(ctx); + Body::Expr(e) + } + Body::Builtin => todo!(), + } + } +} + +impl StmtImpl { + pub fn annotate(&self, ctx: &mut Context) -> StmtImpl { + let span = self.span; + let generics = self.generics.clone(); + let head = self.head.annotate(ctx); + let body = self.where_clause.iter().map(|p| p.annotate(ctx)).collect(); + let defs = self.defs.iter().map(|d| d.annotate(ctx)).collect(); + let tys = self.types.iter().map(|t| t.annotate(ctx)).collect(); + StmtImpl::new(span, generics, head, body, defs, tys) + } +} + +impl StmtTrait { + fn annotate(&self, ctx: &mut Context) -> StmtTrait { + let span = self.span; + let generics = self.generics.clone(); + let name = self.name.clone(); + let body = self.bounds.iter().map(|p| p.annotate(ctx)).collect(); + let defs = self.defs.iter().map(|d| d.annotate(ctx)).collect(); + let assocs = self.types.clone(); + StmtTrait::new(span, name, generics, body, defs, assocs) + } +} + +impl TraitDef { + pub fn annotate(&self, ctx: &mut Context) -> TraitDef { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let preds = self.bounds.iter().map(|p| p.annotate(ctx)).collect(); + let params = self.params.iter().map(|p| p.annotate(ctx)).collect(); + let ty = self.ty.annotate(ctx); + TraitDef::new(span, name, generics, preds, params, ty) + } +} + +impl Expr { + pub fn annotate(&self, ctx: &mut Context) -> Expr { + let s = self.span(); + let t = self.ty().annotate(ctx); + match self { + Expr::Unresolved(..) => unreachable!(), + Expr::Int(_, _, v) => { + let v = v.clone(); + Expr::Int(s, t, v) + } + Expr::Float(_, _, v) => { + let v = v.clone(); + Expr::Float(s, t, v) + } + Expr::Bool(_, _, v) => Expr::Bool(s, t, *v), + Expr::String(_, _, v) => { + let v = v.clone(); + Expr::String(s, t, v) + } + Expr::Var(_, _, x) => { + let x = x.clone(); + Expr::Var(s, t, x) + } + Expr::Def(_, _, x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + Expr::Def(s, t, x, ts) + } + Expr::Call(_, _, e, es) => { + let e = Rc::new(e.annotate(ctx)); + let es = es.iter().map(|e| e.annotate(ctx)).collect(); + Expr::Call(s, t, e, es) + } + Expr::Block(_, _, ss, e) => { + let ss = ss.iter().map(|s| s.annotate(ctx)).collect(); + let e = Rc::new(e.annotate(ctx)); + Expr::Block(s, t, ss, e) + } + Expr::Query(..) => todo!(), + Expr::Struct(_, _, x, ts, xes) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + let xes = xes + .iter() + .map(|(x, e)| (x.clone(), e.annotate(ctx))) + .collect(); + Expr::Struct(s, ctx.new_tyvar(), x, ts, xes) + } + Expr::Enum(_, _, x0, ts0, x1, e) => { + let x0 = x0.clone(); + let ts0 = ts0.iter().map(|t| t.annotate(ctx)).collect(); + let x1 = x1.clone(); + let e = Rc::new(e.annotate(ctx)); + Expr::Enum(s, t, x0, ts0, x1, e) + } + Expr::Field(_, _, e, x) => { + let e = Rc::new(e.annotate(ctx)); + let x = x.clone(); + Expr::Field(s, t, e, x) + } + Expr::Tuple(_, _, es) => { + let es = es.iter().map(|e| e.annotate(ctx)).collect(); + Expr::Tuple(s, t, es) + } + Expr::Assoc(_, _, x0, ts0, x1, ts1) => { + let x0 = x0.clone(); + let ts0 = ts0.iter().map(|t| t.annotate(ctx)).collect(); + let x1 = x1.clone(); + let ts1 = ts1.iter().map(|t| t.annotate(ctx)).collect(); + Expr::Assoc(s, t, x0, ts0, x1, ts1) + } + Expr::Index(_, _, e, i) => { + let e = Rc::new(e.annotate(ctx)); + Expr::Index(s, t, e, *i) + } + Expr::Array(_, _, es) => { + let es = es.iter().map(|e| e.annotate(ctx)).collect(); + Expr::Array(s, t, es) + } + Expr::Err(s, t) => { + let t = t.annotate(ctx); + Expr::Err(*s, t) + } + Expr::Assign(_, _, e0, e1) => { + let e0 = Rc::new(e0.annotate(ctx)); + let e1 = Rc::new(e1.annotate(ctx)); + Expr::Assign(s, t, e0, e1) + } + Expr::Return(_, _, e) => { + let e = Rc::new(e.annotate(ctx)); + Expr::Return(s, t, e) + } + Expr::Continue(_, _) => Expr::Continue(s, t), + Expr::Break(_, _) => Expr::Break(s, t), + Expr::Fun(_, _, ps, t1, e) => { + let ps = ps.iter().map(|p| p.annotate(ctx)).collect(); + let t1 = t1.annotate(ctx); + let e = Rc::new(e.annotate(ctx)); + Expr::Fun(s, t, ps, t1, e) + } + Expr::Match(_, _, e, pes) => { + let e = Rc::new(e.annotate(ctx)); + let pes = pes + .iter() + .map(|(p, e)| (p.annotate(ctx), e.annotate(ctx))) + .collect(); + Expr::Match(s, t, e, pes) + } + Expr::While(_, _, e0, e1) => { + let e0 = Rc::new(e0.annotate(ctx)); + let e1 = Rc::new(e1.annotate(ctx)); + Expr::While(s, t, e0, e1) + } + Expr::Record(_, _, xes) => { + let xes = xes + .iter() + .map(|(x, e)| (x.clone(), e.annotate(ctx))) + .collect(); + Expr::Record(s, t, xes) + } + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + } +} + +impl Pat { + pub fn annotate(&self, ctx: &mut Context) -> Pat { + let s = self.span(); + let t = self.ty().annotate(ctx); + match self { + // Pat::Unresolved(_, _, _, _) => todo!(), + // Pat::Var(_, _, _) => todo!(), + // Pat::Tuple(_, _, _) => todo!(), + // Pat::Struct(_, _, _, _, _) => todo!(), + // Pat::Enum(_, _, _, _, _, _) => todo!(), + // Pat::Int(_, _, _) => todo!(), + // Pat::String(_, _, _) => todo!(), + // Pat::Wildcard(_, _) => todo!(), + // Pat::Bool(_, _, _) => todo!(), + // Pat::Err(_, _) => todo!(), + Pat::Unresolved(_, _, path, args) => { + let path = path.annotate(ctx); + let args = args + .as_ref() + .map(|args| args.iter().map(|arg| arg.annotate(ctx)).collect()); + Pat::Unresolved(s, t, path, args) + } + Pat::Var(_, _, x) => { + let x = x.clone(); + Pat::Var(s, t, x) + } + Pat::Tuple(_, _, ps) => { + let ps = ps.iter().map(|p| p.annotate(ctx)).collect(); + Pat::Tuple(s, t, ps) + } + Pat::Struct(_, _, x, ts, xps) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + let xps = xps + .iter() + .map(|(x, p)| (x.clone(), p.annotate(ctx))) + .collect(); + Pat::Struct(s, t, x, ts, xps) + } + Pat::Enum(_, _, x0, ts, x1, p) => { + let x0 = x0.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + let p = p.annotate(ctx); + Pat::Enum(s, t, x0, ts, x1.clone(), Rc::new(p)) + } + Pat::Int(_, _, v) => { + let v = v.clone(); + Pat::Int(s, t, v) + } + Pat::String(_, _, v) => { + let v = v.clone(); + Pat::String(s, t, v) + } + Pat::Wildcard(_, _) => Pat::Wildcard(s, t), + Pat::Bool(_, _, v) => Pat::Bool(s, t, *v), + Pat::Err(_, _) => Pat::Err(s, t), + } + } +} + +impl PatArg { + pub fn annotate(&self, ctx: &mut Context) -> PatArg { + match self { + PatArg::Named(x, p) => { + let p = p.annotate(ctx); + PatArg::Named(x.clone(), p) + } + PatArg::Unnamed(p) => { + let p = p.annotate(ctx); + PatArg::Unnamed(p) + } + } + } +} + +impl Param { + pub fn annotate(&self, ctx: &mut Context) -> Param { + let span = self.span; + let name = self.name.clone(); + let ty = self.ty.annotate(ctx); + Param::new(span, name, ty) + } +} + +impl Bound { + pub fn annotate(&self, ctx: &mut Context) -> Bound { + let span = self.span(); + match self { + Bound::Unresolved(_, path) => { + let path = path.annotate(ctx); + Bound::Unresolved(span, path) + } + Bound::Trait(_, x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.annotate(ctx)).collect(); + Bound::Trait(span, x, ts) + } + Bound::Err(_) => Bound::Err(span), + } + } +} diff --git a/crates/compiler/src/apply.rs b/crates/compiler/src/apply.rs new file mode 100644 index 0000000..1656f12 --- /dev/null +++ b/crates/compiler/src/apply.rs @@ -0,0 +1,404 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtImpl; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::Type; +use crate::ast::UnresolvedPath; + +impl Program { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Program { + let stmts = self.stmts.iter().map(|s| s.map_type(f)).collect::>(); + Program::new(stmts) + } +} + +impl Type { + pub fn apply(&self, sub: &[(Name, Type)]) -> Type { + match self { + Type::Cons(x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.apply(sub)).collect::>(); + Type::Cons(x, ts) + } + Type::Var(x) => sub + .iter() + .find(|(n, _)| n == x) + .map(|(_, t)| t.apply(sub)) + .unwrap_or_else(|| Type::Var(x.clone())), + Type::Assoc(x0, ts0, x1, ts1) => { + let x0 = x0.clone(); + let ts0 = ts0.iter().map(|t| t.apply(sub)).collect::>(); + let x1 = x1.clone(); + let ts1 = ts1.iter().map(|t| t.apply(sub)).collect::>(); + Type::Assoc(x0, ts0, x1, ts1) + } + Type::Hole => unreachable!(), + Type::Err => Type::Err, + Type::Generic(x) => { + let x = x.clone(); + Type::Generic(x) + } + Type::Fun(ts, t) => { + let ts = ts.iter().map(|t| t.apply(sub)).collect(); + let t = t.apply(sub); + Type::Fun(ts, Rc::new(t)) + } + Type::Tuple(ts) => { + let ts = ts.iter().map(|t| t.apply(sub)).collect(); + Type::Tuple(ts) + } + Type::Record(xts) => { + let xts = xts.iter().map(|(x, t)| (x.clone(), t.apply(sub))).collect(); + Type::Record(xts) + } + Type::Alias(x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.apply(sub)).collect(); + Type::Alias(x, ts) + } + Type::Unresolved(p) => { + let p = p.map_type(&|t| t.apply(sub)); + Type::Unresolved(p) + } + Type::Array(t, n) => { + let t = Rc::new(t.apply(sub)); + let n = *n; + Type::Array(t, n) + } + + Type::Never => Type::Never, + } + } + + pub fn instantiate(&self, sub: &[(Name, Type)]) -> Type { + match self { + Type::Cons(x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.instantiate(sub)).collect::>(); + Type::Cons(x, ts) + } + Type::Var(x) => Type::Var(x.clone()), + Type::Assoc(x0, ts0, x1, ts1) => { + let x0 = x0.clone(); + let ts0 = ts0.iter().map(|t| t.instantiate(sub)).collect::>(); + let x1 = x1.clone(); + let ts1 = ts1.iter().map(|t| t.instantiate(sub)).collect::>(); + Type::Assoc(x0, ts0, x1, ts1) + } + Type::Hole => unreachable!(), + Type::Generic(x) => sub + .iter() + .find(|(n, _)| n == x) + .map(|(_, t)| t.clone()) + .unwrap_or_else(|| Type::Var(x.clone())), + Type::Fun(ts, t) => { + let ts = ts.iter().map(|t| t.instantiate(sub)).collect(); + let t = t.instantiate(sub); + Type::Fun(ts, Rc::new(t)) + } + Type::Tuple(ts) => { + let ts = ts.iter().map(|t| t.instantiate(sub)).collect(); + Type::Tuple(ts) + } + Type::Record(xts) => { + let xts = xts + .iter() + .map(|(x, t)| (x.clone(), t.instantiate(sub))) + .collect(); + Type::Record(xts) + } + Type::Alias(x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(|t| t.instantiate(sub)).collect(); + Type::Alias(x, ts) + } + Type::Err => Type::Err, + Type::Unresolved(p) => { + let p = p.map_type(&|t| t.apply(sub)); + Type::Unresolved(p) + } + Type::Array(t, n) => { + let t = Rc::new(t.instantiate(sub)); + let n = *n; + Type::Array(t, n) + } + Type::Never => Type::Never, + } + } +} + +impl Stmt { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Stmt { + match self { + Stmt::Var(v) => Stmt::Var(v.map_type(f)), + Stmt::Def(d) => Stmt::Def(d.map_type(f)), + Stmt::Impl(i) => Stmt::Impl(i.map_type(f)), + Stmt::Expr(e) => Stmt::Expr(e.map_type(f)), + Stmt::Struct(s) => Stmt::Struct(s.clone()), + Stmt::Enum(s) => Stmt::Enum(s.clone()), + Stmt::Type(s) => Stmt::Type(s.clone()), + Stmt::Trait(s) => Stmt::Trait(s.clone()), + Stmt::Err(_) => todo!(), + } + } +} + +impl StmtVar { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> StmtVar { + let span = self.span; + let name = self.name.clone(); + let ty = f(&self.ty); + let expr = self.expr.map_type(f); + StmtVar::new(span, name, ty, expr) + } +} + +impl StmtDef { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> StmtDef { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let qs = self.where_clause.iter().map(|p| p.map_type(f)).collect(); + let ps = self.params.iter().map(|p| p.map_type(f)).collect(); + let t = f(&self.ty); + let e = self.body.map_type(f); + StmtDef::new(span, name, generics, qs, ps, t, e) + } +} + +impl Body { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Body { + match self { + Body::Expr(e) => Body::Expr(e.map_type(f)), + Body::Builtin => Body::Builtin, + } + } +} + +impl StmtImpl { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> StmtImpl { + let span = self.span; + let generics = self.generics.clone(); + let head = self.head.map_type(f); + let body = self.where_clause.iter().map(|p| p.map_type(f)).collect(); + let defs = self.defs.iter().map(|d| d.map_type(f)).collect(); + let types = self.types.iter().map(|t| t.map_type(f)).collect(); + StmtImpl::new(span, generics, head, body, defs, types) + } +} + +impl StmtType { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> StmtType { + let span = self.span; + let name = self.name.clone(); + let generics = self.generics.clone(); + let ty = f(&self.ty); + StmtType::new(span, name, generics, ty) + } +} + +impl UnresolvedPath { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> UnresolvedPath { + let segments = self + .segments + .iter() + .map(|(x, ts)| (x.clone(), ts.iter().map(f).collect())) + .collect::>(); + UnresolvedPath::new(segments) + } +} + +impl Bound { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Bound { + let span = self.span(); + match self { + Bound::Unresolved(_, path) => Bound::Unresolved(span, path.map_type(f)), + Bound::Trait(_, x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(f).collect(); + Bound::Trait(span, x, ts) + } + Bound::Err(_) => Bound::Err(span), + } + } +} + +impl Expr { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Expr { + let s = self.span(); + let t = f(self.ty()); + match self { + Expr::Unresolved(..) => unreachable!(), + Expr::Int(_, _, v) => { + let v = v.clone(); + Expr::Int(s, t, v) + } + Expr::Float(_, _, v) => { + let v = v.clone(); + Expr::Float(s, t, v) + } + Expr::Bool(_, _, v) => Expr::Bool(s, t, *v), + Expr::String(_, _, v) => { + let v = v.clone(); + Expr::String(s, t, v) + } + Expr::Var(_, _, x) => { + let x = x.clone(); + Expr::Var(s, t, x) + } + Expr::Def(_, _, x, ts) => { + let x = x.clone(); + let ts = ts.iter().map(f).collect(); + Expr::Def(s, t, x, ts) + } + Expr::Call(_, _, e, es) => { + let e = e.map_type(f); + let es = es.iter().map(|e| e.map_type(f)).collect(); + Expr::Call(s, t, Rc::new(e), es) + } + Expr::Block(_, _, ss, e) => { + let ss = ss.iter().map(|s| s.map_type(f)).collect(); + let e = e.map_type(f); + Expr::Block(s, t, ss, Rc::new(e)) + } + Expr::Query(..) => todo!(), + Expr::Struct(_, _, x, ts, xts) => { + let x = x.clone(); + let ts = ts.iter().map(f).collect(); + let xts = xts + .iter() + .map(|(x, e)| (x.clone(), e.map_type(f))) + .collect(); + Expr::Struct(s, t, x, ts, xts) + } + Expr::Enum(_, _, x0, ts, x1, e) => { + let x0 = x0.clone(); + let ts = ts.iter().map(f).collect(); + let x1 = x1.clone(); + let e = e.map_type(f); + Expr::Enum(s, t, x0, ts, x1, Rc::new(e)) + } + Expr::Field(_, _, e, x) => { + let e = Rc::new(e.map_type(f)); + let x = x.clone(); + Expr::Field(s, t, e, x) + } + Expr::Tuple(_, _, es) => { + let es = es.iter().map(|e| e.map_type(f)).collect(); + Expr::Tuple(s, t, es) + } + Expr::Assoc(_, _, x0, ts0, x1, ts1) => { + let x0 = x0.clone(); + let ts0 = ts0.iter().map(f).collect(); + let x1 = x1.clone(); + let ts1 = ts1.iter().map(f).collect(); + Expr::Assoc(s, t, x0, ts0, x1, ts1) + } + Expr::Index(_, _, e, i) => { + let e = Rc::new(e.map_type(f)); + Expr::Index(s, t, e, *i) + } + Expr::Array(_, _, es) => { + let es = es.iter().map(|e| e.map_type(f)).collect(); + Expr::Array(s, t, es) + } + Expr::Err(_, _) => Expr::Err(s, t), + Expr::Assign(_, _, e0, e1) => { + let e0 = Rc::new(e0.map_type(f)); + let e1 = Rc::new(e1.map_type(f)); + Expr::Assign(s, t, e0, e1) + } + Expr::Return(_, _, e) => { + let e = Rc::new(e.map_type(f)); + Expr::Return(s, t, e) + } + Expr::Continue(_, _) => Expr::Continue(s, t), + Expr::Break(_, _) => Expr::Break(s, t), + Expr::Fun(_, _, ps, t1, e) => { + let ps = ps.iter().map(|p| p.map_type(f)).collect(); + let t1 = f(t1); + let e = Rc::new(e.map_type(f)); + Expr::Fun(s, t, ps, t1, e) + } + Expr::Match(_, _, e, pes) => { + let e = Rc::new(e.map_type(f)); + let pes = pes + .iter() + .map(|(p, e)| (p.clone(), e.map_type(f))) + .collect(); + Expr::Match(s, t, e, pes) + } + Expr::While(_, _, e0, e1) => { + let e0 = Rc::new(e0.map_type(f)); + let e1 = Rc::new(e1.map_type(f)); + Expr::While(s, t, e0, e1) + } + Expr::Record(_, _, xes) => { + let xes = xes + .iter() + .map(|(x, e)| (x.clone(), e.map_type(f))) + .collect(); + Expr::Record(s, t, xes) + } + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + } +} + +impl Pat { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Pat { + let t = f(self.ty()); + let span = self.span(); + match self { + Pat::Unresolved(..) => unreachable!(), + Pat::Var(_, _, x) => Pat::Var(span, t, x.clone()), + Pat::Tuple(_, _, es) => { + let es = es.iter().map(|e| e.map_type(f)).collect(); + Pat::Tuple(span, t, es) + } + Pat::Struct(_, _, x, ts, xps) => { + let x = x.clone(); + let ts = ts.iter().map(f).collect(); + let xps = xps + .iter() + .map(|(x, p)| (x.clone(), p.map_type(f))) + .collect(); + Pat::Struct(span, t, x, ts, xps) + } + Pat::Enum(_, _, x0, ts, x1, p) => { + let x0 = x0.clone(); + let ts = ts.iter().map(f).collect(); + let x1 = x1.clone(); + let p = Rc::new(p.map_type(f)); + Pat::Enum(span, t, x0, ts, x1, p) + } + Pat::Int(_, _, v) => Pat::Int(span, t, v.clone()), + Pat::String(_, _, v) => Pat::String(span, t, v.clone()), + Pat::Wildcard(_, _) => Pat::Wildcard(span, t), + Pat::Bool(_, _, v) => Pat::Bool(span, t, *v), + Pat::Err(_, _) => Pat::Err(span, t), + } + } +} + +impl Param { + pub fn map_type(&self, f: &impl Fn(&Type) -> Type) -> Param { + let span = self.span; + let name = self.name.clone(); + let t = f(&self.ty); + Param::new(span, name, t) + } +} diff --git a/crates/compiler/src/ast.rs b/crates/compiler/src/ast.rs new file mode 100644 index 0000000..7925820 --- /dev/null +++ b/crates/compiler/src/ast.rs @@ -0,0 +1,773 @@ +use std::rc::Rc; + +use serde::Deserialize; +use serde::Serialize; +use smol_str::SmolStr; + +use crate::builtins::Value; +use crate::lexer::Span; +use crate::lexer::Token; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct UnresolvedPath { + pub segments: Vec<(Name, Vec)>, +} + +impl UnresolvedPath { + pub fn new(segments: Vec<(Name, Vec)>) -> Self { + Self { segments } + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct Name { + pub span: Span, + pub data: SmolStr, +} + +impl Serialize for Name { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.data.serialize(serializer) + } +} + +impl<'de> Deserialize<'de> for Name { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + String::deserialize(deserializer).map(|data| Self { + span: Span::default(), + data: SmolStr::from(data), + }) + } +} + +impl Ord for Name { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.data.cmp(&other.data) + } +} + +impl PartialOrd for Name { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.data.cmp(&other.data)) + } +} + +impl From<&str> for Name { + fn from(s: &str) -> Name { + Name { + span: Span::default(), + data: SmolStr::from(s), + } + } +} + +impl From for Name { + fn from(s: String) -> Name { + Name { + span: Span::default(), + data: SmolStr::from(s), + } + } +} + +impl Name { + pub fn new(span: Span, data: impl Into) -> Name { + Name { + span, + data: data.into(), + } + } +} + +impl Index { + pub fn new(span: Span, index: usize) -> Index { + Index { span, data: index } + } +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Program { + pub stmts: Vec, +} + +// An impl is like a rule +// forall :- . +// impl where +// i.e., impl Clone for Vec where T: Clone {} +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtImpl { + pub span: Span, + pub generics: Vec, + pub head: Bound, + pub where_clause: Vec, + pub defs: Vec, + pub types: Vec, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtTrait { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub bounds: Vec, + pub defs: Vec, + pub types: Vec, +} + +// A trait is like a predicate +// () +// e.g., Clone(i32) +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Bound { + Unresolved(Span, UnresolvedPath), + Trait(Span, Name, Vec), + Err(Span), +} + +// A type is like a proposition +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Type { + Unresolved(UnresolvedPath), + Cons(Name, Vec), + Alias(Name, Vec), + Assoc(Name, Vec, Name, Vec), + Var(Name), + Generic(Name), + Fun(Vec, Rc), + Tuple(Vec), + Record(Vec<(Name, Type)>), + Array(Rc, Option), + Never, + Hole, + Err, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Param { + pub span: Span, + pub name: Name, + pub ty: Type, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Candidate { + // An implementation of a trait for a type. + Impl(StmtImpl), + // A bound in a where clause + Bound(Bound), +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Stmt { + Var(StmtVar), + Def(StmtDef), + Trait(StmtTrait), + Impl(StmtImpl), + Struct(StmtStruct), + Enum(StmtEnum), + Type(StmtType), + Expr(Expr), + Err(Span), +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct TraitType { + pub span: Span, + pub name: Name, + pub generics: Vec, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct TraitDef { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub bounds: Vec, + pub params: Vec, + pub ty: Type, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtVar { + pub span: Span, + pub name: Name, + pub ty: Type, + pub expr: Expr, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtDef { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub where_clause: Vec, + pub params: Vec, + pub ty: Type, + pub body: Body, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Body { + Expr(Expr), + Builtin, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtStruct { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub fields: Vec<(Name, Type)>, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtEnum { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub variants: Vec<(Name, Type)>, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct StmtType { + pub span: Span, + pub name: Name, + pub generics: Vec, + pub ty: Type, +} + +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +pub struct Index { + pub span: Span, + pub data: usize, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Expr { + Unresolved(Span, Type, UnresolvedPath), + Prefix(Span, Type, Token, Rc), + Infix(Span, Type, Token, Rc, Rc), + Postfix(Span, Type, Token, Rc), + Int(Span, Type, String), + Float(Span, Type, String), + Bool(Span, Type, bool), + String(Span, Type, String), + Struct(Span, Type, Name, Vec, Vec<(Name, Expr)>), + Tuple(Span, Type, Vec), + Record(Span, Type, Vec<(Name, Expr)>), + Enum(Span, Type, Name, Vec, Name, Rc), + Field(Span, Type, Rc, Name), + Index(Span, Type, Rc, Index), + Var(Span, Type, Name), + Def(Span, Type, Name, Vec), + Call(Span, Type, Rc, Vec), + Block(Span, Type, Vec, Rc), + Query(Span, Type, Vec), + Assoc(Span, Type, Name, Vec, Name, Vec), + Match(Span, Type, Rc, Vec<(Pat, Expr)>), + Array(Span, Type, Vec), + Assign(Span, Type, Rc, Rc), + Return(Span, Type, Rc), + Continue(Span, Type), + Break(Span, Type), + While(Span, Type, Rc, Rc), + Fun(Span, Type, Vec, Type, Rc), + Err(Span, Type), + Value(Type, Value), +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum PatArg { + Named(Name, Pat), + Unnamed(Pat), +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Pat { + Unresolved(Span, Type, UnresolvedPath, Option>), + Var(Span, Type, Name), + Tuple(Span, Type, Vec), + Struct(Span, Type, Name, Vec, Vec<(Name, Pat)>), + Enum(Span, Type, Name, Vec, Name, Rc), + Int(Span, Type, String), + String(Span, Type, String), + Wildcard(Span, Type), + Bool(Span, Type, bool), + Err(Span, Type), +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Query { + From(Span, Type, Vec<(Name, Expr)>), + Where(Span, Type, Rc), + Select(Span, Type, Vec<(Name, Expr)>), + Join(Span, Type, Vec<(Name, Expr)>, Rc), + Group(Span, Type, Vec, Vec), + Over(Span, Type, Rc, Vec), + Order(Span, Type, Vec<(Name, bool)>), + With(Span, Type, Vec<(Name, Expr)>), + Into(Span, Type, Vec), + Compute(Span, Type, Vec<(Name, Expr, Expr)>), +} + +impl Program { + pub fn new(stmts: Vec) -> Program { + Program { stmts } + } +} + +impl StmtImpl { + pub fn new( + span: Span, + generics: Vec, + head: Bound, + where_clause: Vec, + defs: Vec, + types: Vec, + ) -> StmtImpl { + StmtImpl { + span, + generics, + where_clause, + types, + head, + defs, + } + } +} + +impl StmtType { + pub fn new(span: Span, name: Name, generics: Vec, ty: Type) -> StmtType { + StmtType { + span, + name, + generics, + ty, + } + } +} + +impl StmtTrait { + pub fn new( + span: Span, + name: Name, + generics: Vec, + body: Vec, + defs: Vec, + types: Vec, + ) -> StmtTrait { + StmtTrait { + span, + name, + generics, + bounds: body, + defs, + types, + } + } +} + +impl TraitType { + pub fn new(span: Span, name: Name, generics: Vec) -> Self { + Self { + span, + name, + generics, + } + } +} + +impl Param { + pub fn new(span: Span, name: Name, ty: Type) -> Param { + Param { span, name, ty } + } +} + +impl StmtVar { + pub fn new(span: Span, name: Name, ty: Type, expr: Expr) -> StmtVar { + StmtVar { + span, + name, + ty, + expr, + } + } +} + +impl StmtDef { + pub fn new( + span: Span, + name: Name, + generics: Vec, + where_clause: Vec, + params: Vec, + ty: Type, + body: Body, + ) -> StmtDef { + StmtDef { + span, + name, + generics, + where_clause, + params, + ty, + body, + } + } +} + +impl StmtStruct { + pub fn new( + span: Span, + name: Name, + generics: Vec, + fields: Vec<(Name, Type)>, + ) -> StmtStruct { + StmtStruct { + span, + name, + generics, + fields, + } + } +} + +impl StmtEnum { + pub fn new( + span: Span, + name: Name, + generics: Vec, + variants: Vec<(Name, Type)>, + ) -> StmtEnum { + StmtEnum { + span, + name, + generics, + variants, + } + } +} + +impl TraitDef { + pub fn new( + span: Span, + name: Name, + generics: Vec, + where_clause: Vec, + params: Vec, + ty: Type, + ) -> Self { + Self { + span, + name, + generics, + bounds: where_clause, + params, + ty, + } + } +} + +impl Bound { + pub fn span(&self) -> Span { + match self { + Bound::Unresolved(s, _) => *s, + Bound::Trait(s, _, _) => *s, + Bound::Err(s) => *s, + } + } +} + +impl From for Stmt { + fn from(v: StmtVar) -> Stmt { + Stmt::Var(v) + } +} + +impl From for Stmt { + fn from(d: StmtDef) -> Stmt { + Stmt::Def(d) + } +} +impl From for Stmt { + fn from(i: StmtImpl) -> Stmt { + Stmt::Impl(i) + } +} + +impl From for Stmt { + fn from(e: Expr) -> Stmt { + Stmt::Expr(e) + } +} + +impl From for Stmt { + fn from(s: StmtStruct) -> Stmt { + Stmt::Struct(s) + } +} + +impl From for Stmt { + fn from(e: StmtEnum) -> Stmt { + Stmt::Enum(e) + } +} + +impl From for Stmt { + fn from(t: StmtType) -> Stmt { + Stmt::Type(t) + } +} + +impl From for Stmt { + fn from(t: StmtTrait) -> Stmt { + Stmt::Trait(t) + } +} + +impl Expr { + pub fn ty(&self) -> &Type { + match self { + Expr::Int(_, t, ..) => t, + Expr::Float(_, t, ..) => t, + Expr::Bool(_, t, ..) => t, + Expr::String(_, t, ..) => t, + Expr::Struct(_, t, ..) => t, + Expr::Tuple(_, t, ..) => t, + Expr::Enum(_, t, ..) => t, + Expr::Var(_, t, ..) => t, + Expr::Def(_, t, ..) => t, + Expr::Call(_, t, ..) => t, + Expr::Block(_, t, ..) => t, + Expr::Query(_, t, ..) => t, + Expr::Field(_, t, ..) => t, + Expr::Assoc(_, t, ..) => t, + Expr::Err(_, t) => t, + Expr::Index(_, t, ..) => t, + Expr::Array(_, t, ..) => t, + Expr::Assign(_, t, ..) => t, + Expr::Return(_, t, ..) => t, + Expr::Continue(_, t) => t, + Expr::Break(_, t) => t, + Expr::Fun(_, t, ..) => t, + Expr::Match(_, t, ..) => t, + Expr::While(_, t, ..) => t, + Expr::Record(_, t, _) => t, + Expr::Unresolved(_, t, _) => t, + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => todo!(), + Expr::Postfix(_, _, _, _) => todo!(), + Expr::Prefix(_, _, _, _) => todo!(), + } + } + + #[inline(always)] + pub fn of(self, t: Type) -> Expr { + match self { + Expr::Int(s, _, v) => Expr::Int(s, t, v), + Expr::Float(s, _, v) => Expr::Float(s, t, v), + Expr::Bool(s, _, v) => Expr::Bool(s, t, v), + Expr::String(s, _, v) => Expr::String(s, t, v), + Expr::Var(s, _, x) => Expr::Var(s, t, x), + Expr::Def(s, _, x, ts) => Expr::Def(s, t, x, ts), + Expr::Call(s, _, e, es) => Expr::Call(s, t, e, es), + Expr::Block(s, _, ss, e) => Expr::Block(s, t, ss, e), + Expr::Query(s, _, qs) => Expr::Query(s, t, qs), + Expr::Struct(s, _, x, ts, xes) => Expr::Struct(s, t, x, ts, xes), + Expr::Enum(s, _, x0, ts, x1, e) => Expr::Enum(s, t, x0, ts, x1, e), + Expr::Field(s, _, e, x) => Expr::Field(s, t, e, x), + Expr::Tuple(s, _, es) => Expr::Tuple(s, t, es), + Expr::Assoc(s, _, x0, ts0, x1, ts1) => Expr::Assoc(s, t, x0, ts0, x1, ts1), + Expr::Index(s, _, e, i) => Expr::Index(s, t, e, i), + Expr::Array(s, _, es) => Expr::Array(s, t, es), + Expr::Assign(s, _, e0, e1) => Expr::Assign(s, t, e0, e1), + Expr::Return(s, _, e) => Expr::Return(s, t, e), + Expr::Continue(s, _) => Expr::Continue(s, t), + Expr::Break(s, _) => Expr::Break(s, t), + Expr::Fun(s, _, ps, t1, e) => Expr::Fun(s, t, ps, t1, e), + Expr::Match(s, _, e, pes) => Expr::Match(s, t, e, pes), + Expr::Err(s, _) => Expr::Err(s, t), + Expr::While(s, _, e0, e1) => Expr::While(s, t, e0, e1), + Expr::Record(_, _, _) => todo!(), + Expr::Unresolved(s, _, p) => Expr::Unresolved(s, t, p), + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => todo!(), + Expr::Postfix(_, _, _, _) => todo!(), + Expr::Prefix(_, _, _, _) => todo!(), + } + } + + pub fn span(&self) -> Span { + match self { + Expr::Int(s, ..) => *s, + Expr::Float(s, ..) => *s, + Expr::Bool(s, ..) => *s, + Expr::String(s, ..) => *s, + Expr::Struct(s, ..) => *s, + Expr::Tuple(s, ..) => *s, + Expr::Enum(s, ..) => *s, + Expr::Field(s, ..) => *s, + Expr::Var(s, ..) => *s, + Expr::Def(s, ..) => *s, + Expr::Call(s, ..) => *s, + Expr::Block(s, ..) => *s, + Expr::Query(s, ..) => *s, + Expr::Assoc(s, ..) => *s, + Expr::Index(s, ..) => *s, + Expr::Array(s, ..) => *s, + Expr::Assign(s, ..) => *s, + Expr::Return(s, ..) => *s, + Expr::Continue(s, ..) => *s, + Expr::Break(s, ..) => *s, + Expr::Fun(s, ..) => *s, + Expr::Match(s, ..) => *s, + Expr::Err(s, ..) => *s, + Expr::While(s, ..) => *s, + Expr::Record(s, _, _) => *s, + Expr::Unresolved(s, _, _) => *s, + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => todo!(), + Expr::Postfix(_, _, _, _) => todo!(), + Expr::Prefix(_, _, _, _) => todo!(), + } + } + + #[inline(always)] + pub fn with_span(self, span: Span) -> Expr { + match self { + Expr::Unresolved(_, t, p) => Expr::Unresolved(span, t, p), + Expr::Record(_, t, xes) => Expr::Record(span, t, xes), + Expr::While(_, t, e0, e1) => Expr::While(span, t, e0, e1), + Expr::Int(_, t, v) => Expr::Int(span, t, v), + Expr::Float(_, t, v) => Expr::Float(span, t, v), + Expr::Bool(_, t, v) => Expr::Bool(span, t, v), + Expr::String(_, t, v) => Expr::String(span, t, v), + Expr::Struct(_, t, x, ts, xes) => Expr::Struct(span, t, x, ts, xes), + Expr::Tuple(_, t, es) => Expr::Tuple(span, t, es), + Expr::Enum(_, t, x0, ts, x1, e) => Expr::Enum(span, t, x0, ts, x1, e), + Expr::Var(_, t, x) => Expr::Var(span, t, x), + Expr::Def(_, t, x, ts) => Expr::Def(span, t, x, ts), + Expr::Call(_, t, e, es) => Expr::Call(span, t, e, es), + Expr::Block(_, t, ss, e) => Expr::Block(span, t, ss, e), + Expr::Query(_, t, qs) => Expr::Query(span, t, qs), + Expr::Field(_, t, e, x) => Expr::Field(span, t, e, x), + Expr::Assoc(_, t, x0, ts0, x1, ts1) => Expr::Assoc(span, t, x0, ts0, x1, ts1), + Expr::Index(_, t, e, i) => Expr::Index(span, t, e, i), + Expr::Array(_, t, es) => Expr::Array(span, t, es), + Expr::Assign(_, t, e0, e1) => Expr::Assign(span, t, e0, e1), + Expr::Return(_, t, e) => Expr::Return(span, t, e), + Expr::Continue(_, t) => Expr::Continue(span, t), + Expr::Break(_, t) => Expr::Break(span, t), + Expr::Fun(_, t, ps, t1, e) => Expr::Fun(span, t, ps, t1, e), + Expr::Match(_, t, e, pes) => Expr::Match(span, t, e, pes), + Expr::Err(_, t) => Expr::Err(span, t), + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => todo!(), + Expr::Postfix(_, _, _, _) => todo!(), + Expr::Prefix(_, _, _, _) => todo!(), + } + } +} + +impl Pat { + pub fn ty(&self) -> &Type { + match self { + Pat::Unresolved(_, t, _, _) => t, + Pat::Var(_, t, ..) => t, + Pat::Tuple(_, t, ..) => t, + Pat::Struct(_, t, ..) => t, + Pat::Enum(_, t, ..) => t, + Pat::Int(_, t, ..) => t, + Pat::Wildcard(_, t, ..) => t, + Pat::String(_, t, ..) => t, + Pat::Bool(_, t, ..) => t, + Pat::Err(_, t) => t, + } + } + + #[inline(always)] + pub fn with_ty(self, t: Type) -> Pat { + match self { + Pat::Unresolved(s, _, p, a) => Pat::Unresolved(s, t, p, a), + Pat::Var(s, _, x) => Pat::Var(s, t, x), + Pat::Tuple(s, _, ps) => Pat::Tuple(s, t, ps), + Pat::Struct(s, _, x, ts, xps) => Pat::Struct(s, t, x, ts, xps), + Pat::Enum(s, _, x0, ts, x1, p) => Pat::Enum(s, t, x0, ts, x1, p), + Pat::Int(s, _, v) => Pat::Int(s, t, v), + Pat::String(s, _, v) => Pat::String(s, t, v), + Pat::Wildcard(s, _) => Pat::Wildcard(s, t), + Pat::Bool(s, _, v) => Pat::Bool(s, t, v), + Pat::Err(s, _) => Pat::Err(s, t), + } + } + + pub fn span(&self) -> Span { + match self { + Pat::Unresolved(s, _, _, _) => *s, + Pat::Var(s, ..) => *s, + Pat::Tuple(s, ..) => *s, + Pat::Struct(s, ..) => *s, + Pat::Enum(s, ..) => *s, + Pat::Int(s, ..) => *s, + Pat::Wildcard(s, ..) => *s, + Pat::String(s, ..) => *s, + Pat::Bool(s, ..) => *s, + Pat::Err(s, _) => *s, + } + } + + #[inline(always)] + pub fn with_span(self, s: Span) -> Pat { + match self { + Pat::Unresolved(_, t, p, a) => Pat::Unresolved(s, t, p, a), + Pat::Var(_, t, x) => Pat::Var(s, t, x), + Pat::Tuple(_, t, ps) => Pat::Tuple(s, t, ps), + Pat::Struct(_, t, x, ts, xps) => Pat::Struct(s, t, x, ts, xps), + Pat::Enum(_, t, x0, ts, x1, p) => Pat::Enum(s, t, x0, ts, x1, p), + Pat::Int(_, t, v) => Pat::Int(s, t, v), + Pat::Wildcard(_, t) => Pat::Wildcard(s, t), + Pat::String(_, t, v) => Pat::String(s, t, v), + Pat::Bool(_, t, v) => Pat::Bool(s, t, v), + Pat::Err(_, t) => Pat::Err(s, t), + } + } +} + +impl Query { + pub fn span(&self) -> Span { + match self { + Query::From(s, ..) => *s, + Query::Where(s, ..) => *s, + Query::Select(s, ..) => *s, + Query::Into(s, ..) => *s, + Query::Join(s, ..) => *s, + Query::Group(s, ..) => *s, + Query::Over(s, ..) => *s, + Query::Order(s, ..) => *s, + Query::With(s, ..) => *s, + Query::Compute(s, ..) => *s, + } + } + + #[inline(always)] + pub fn with_span(self, s: Span) -> Query { + match self { + Query::From(_, t, xes) => Query::From(s, t, xes), + Query::Where(_, t, e) => Query::Where(s, t, e), + Query::Select(_, t, xes) => Query::Select(s, t, xes), + Query::Into(_, t, es) => Query::Into(s, t, es), + Query::Join(_, t, xes, e) => Query::Join(s, t, xes, e), + Query::Group(_, t, xs, qs) => Query::Group(s, t, xs, qs), + Query::Over(_, t, e, qs) => Query::Over(s, t, e, qs), + Query::Order(_, t, xs) => Query::Order(s, t, xs), + Query::With(_, t, xes) => Query::With(s, t, xes), + Query::Compute(_, t, xes) => Query::Compute(s, t, xes), + } + } +} diff --git a/crates/compiler/src/builtins/conv.rs b/crates/compiler/src/builtins/conv.rs new file mode 100644 index 0000000..bbbdd61 --- /dev/null +++ b/crates/compiler/src/builtins/conv.rs @@ -0,0 +1,101 @@ +use std::rc::Rc; + +use runtime::builtins::aggregator::Aggregator; +use runtime::builtins::assigner::Assigner; +use runtime::builtins::blob::Blob; +use runtime::builtins::dict::Dict; +use runtime::builtins::duration::Duration; +use runtime::builtins::encoding::Encoding; +use runtime::builtins::file::File; +// use runtime::builtins::image::Image; +// #[cfg(feature = "model")] +// use runtime::builtins::model::Model; +use runtime::builtins::path::Path; +use runtime::builtins::reader::Reader; +use runtime::builtins::set::Set; +use runtime::builtins::socket::SocketAddr; +use runtime::builtins::time::Time; +use runtime::builtins::time_source::TimeSource; +// use runtime::builtins::url::Url; +use runtime::builtins::writer::Writer; + +use super::dynamic::array::Array; +use super::dynamic::dataflow::Dataflow; +use super::dynamic::function::Fun; +use super::dynamic::instance::Instance; +// use super::dynamic::matrix::Matrix; +use super::dynamic::record::Record; +use super::dynamic::stream::Stream; +use super::dynamic::tuple::Tuple; +use super::dynamic::variant::Variant; +use super::Value; + +macro_rules! conv { + { + $type:ty, $variant:ident, $as:ident + } => { + impl Value { + #[track_caller] + pub fn $as(&self) -> $type { + if let Value::$variant(v) = self { + v.clone() + } else { + unreachable!("{}{:?}", std::panic::Location::caller(), self); + } + } + } + impl From<$type> for Value { + fn from(v: $type) -> Self { + Value::$variant(v) + } + } + } +} + +conv!(Array, Array, as_array); +conv!(Tuple, Tuple, as_tuple); +conv!(Fun, Fun, as_function); +// conv!(Matrix, Matrix, as_matrix); +conv!(Record, Record, as_record); +conv!(Stream, Stream, as_stream); +conv!(Variant, Variant, as_variant); +conv!(bool, Bool, as_bool); +conv!(Aggregator, Aggregator, as_aggregator); +conv!(Blob, Blob, as_blob); +conv!(Dict, Dict, as_dict); +conv!(Assigner, Discretizer, as_discretizer); +conv!(Duration, Duration, as_duration); +conv!(Dataflow, Dataflow, as_dataflow); +conv!(Encoding, Encoding, as_encoding); +conv!(File, File, as_file); +#[cfg(feature = "model")] +conv!(Model, Model, as_model); +conv!(runtime::builtins::option::Option>, Option, as_option); +conv!(Path, Path, as_path); +conv!(Reader, Reader, as_reader); +conv!(runtime::builtins::result::Result>, Result, as_result); +conv!(Set, Set, as_set); +conv!(SocketAddr, SocketAddr, as_socket_addr); +conv!(runtime::builtins::im_string::String, String, as_string); +conv!(Time, Time, as_time); +conv!(TimeSource, TimeSource, as_time_source); +// conv!(Url, Url, as_url); +conv!(runtime::builtins::vec::Vec, Vec, as_vec); + +conv!(Writer, Writer, as_writer); +conv!(char, Char, as_char); +conv!(f32, F32, as_f32); +conv!(f64, F64, as_f64); +conv!(i128, I128, as_i128); +conv!(i16, I16, as_i16); +conv!(i32, I32, as_i32); +conv!(i64, I64, as_i64); +conv!(i8, I8, as_i8); +conv!(u128, U128, as_u128); +conv!(u16, U16, as_u16); +conv!(u32, U32, as_u32); +conv!(u64, U64, as_u64); +conv!(u8, U8, as_u8); +conv!(usize, Usize, as_usize); +conv!(Instance, Instance, as_instance); +// conv!(Image, Image, as_image); diff --git a/crates/compiler/src/builtins/de.rs b/crates/compiler/src/builtins/de.rs new file mode 100644 index 0000000..a367608 --- /dev/null +++ b/crates/compiler/src/builtins/de.rs @@ -0,0 +1,326 @@ +use std::collections::HashMap; + +use serde::de::DeserializeSeed; +use serde::de::MapAccess; +use serde::de::VariantAccess; +use serde::de::Visitor; +use serde::Deserialize; +use serde::Deserializer; + +use crate::ast::Name; +use crate::builtins::Array; +use crate::builtins::Record; +use crate::*; + +// use super::Matrix; +use super::Tuple; +use super::Value; + +pub struct Seed(pub Type); + +impl<'de> DeserializeSeed<'de> for Seed { + type Value = Value; + + fn deserialize(self, deserializer: D) -> Result + where + D: Deserializer<'de>, + { + match self.0 { + Type::Fun(_, _) => unreachable!(), + Type::Tuple(ts) if ts.is_empty() => <() as Deserialize>::deserialize(deserializer) + .map(|()| Value::from(Tuple::new(vec![]))), + Type::Tuple(ts) => { + struct TupleVisitor(Vec); + impl<'de> Visitor<'de> for TupleVisitor { + type Value = Value; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "a tuple of length {}", self.0.len()) + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: serde::de::SeqAccess<'de>, + { + let mut v = Vec::new(); + for t in self.0 { + let context = Seed(t); + v.push(seq.next_element_seed(context)?.unwrap()); + } + Ok(Value::from(Tuple::new(v))) + } + } + deserializer.deserialize_tuple(ts.len(), TupleVisitor(ts.clone())) + } + Type::Record(xts) => { + struct RecordVisitor(HashMap); + impl<'de> Visitor<'de> for RecordVisitor { + type Value = Value; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "a record with fields {:?}", self.0) + } + + fn visit_map(mut self, mut map: A) -> Result + where + A: MapAccess<'de>, + { + let mut result = HashMap::new(); + while !self.0.is_empty() { + let k = map.next_key()?.unwrap(); + if let Some(t) = self.0.remove(&k) { + result.insert(k, map.next_value_seed(Seed(t))?); + } else { + return Err(serde::de::Error::custom("Found unexpected field")); + } + } + Ok(Value::from(Record::new(result.into_iter().collect()))) + } + } + deserializer.deserialize_map(RecordVisitor(xts.into_iter().collect())) + } + Type::Cons(x, ts) => match x.data.as_str() { + "i8" => i8::deserialize(deserializer).map(Value::from), + "i16" => i16::deserialize(deserializer).map(Value::from), + "i32" => i32::deserialize(deserializer).map(Value::from), + "i64" => i64::deserialize(deserializer).map(Value::from), + "u8" => u8::deserialize(deserializer).map(Value::from), + "u16" => u16::deserialize(deserializer).map(Value::from), + "u32" => u32::deserialize(deserializer).map(Value::from), + "u64" => u64::deserialize(deserializer).map(Value::from), + "usize" => usize::deserialize(deserializer).map(Value::from), + "f32" => f32::deserialize(deserializer).map(Value::from), + "f64" => f64::deserialize(deserializer).map(Value::from), + "bool" => bool::deserialize(deserializer).map(Value::from), + "char" => char::deserialize(deserializer).map(Value::from), + "String" => String::deserialize(deserializer) + .map(runtime::builtins::im_string::String::from) + .map(Value::from), + "Dict" => { + struct DictVisitor(Type, Type); + impl<'de> Visitor<'de> for DictVisitor { + type Value = Value; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter, + ) -> std::fmt::Result { + write!(formatter, "a dict") + } + + fn visit_map(self, mut map: A) -> Result + where + A: MapAccess<'de>, + { + let mut result = std::collections::HashMap::default(); + while let Some((k, v)) = + map.next_entry_seed(Seed(self.0.clone()), Seed(self.1.clone()))? + { + result.insert(k, v); + } + Ok(Value::from(runtime::builtins::dict::Dict::from(result))) + } + } + let k = ts[0].clone(); + let v = ts[1].clone(); + deserializer.deserialize_map(DictVisitor(k, v)) + } + "Set" => { + struct SetVisitor(Type); + impl<'de> Visitor<'de> for SetVisitor { + type Value = Value; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter, + ) -> std::fmt::Result { + write!(formatter, "a set") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: serde::de::SeqAccess<'de>, + { + let mut result = std::collections::HashSet::new(); + while let Some(v) = seq.next_element_seed(Seed(self.0.clone()))? { + result.insert(v); + } + Ok(Value::from(runtime::builtins::set::Set::from(result))) + } + } + let t = ts[0].clone(); + deserializer.deserialize_seq(SetVisitor(t)) + } + "Time" => runtime::builtins::time::Time::deserialize(deserializer).map(Value::from), + "Duration" => runtime::builtins::duration::Duration::deserialize(deserializer) + .map(Value::from), + // "Url" => runtime::builtins::url::Url::deserialize(deserializer).map(Value::from), + "Path" => runtime::builtins::path::Path::deserialize(deserializer).map(Value::from), + "Blob" => runtime::builtins::blob::Blob::deserialize(deserializer).map(Value::from), + "Option" => { + struct OptionVisitor(Type); + impl<'de> Visitor<'de> for OptionVisitor { + type Value = Value; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter, + ) -> std::fmt::Result { + write!(formatter, "an option") + } + + fn visit_some(self, deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let v = Seed(self.0).deserialize(deserializer)?; + Ok(Value::from(runtime::builtins::option::Option::some( + Rc::new(v), + ))) + } + + fn visit_none(self) -> Result { + Ok(Value::from(runtime::builtins::option::Option::none())) + } + } + let t = ts[0].clone(); + deserializer.deserialize_option(OptionVisitor(t)) + } + "Result" => { + struct ResultVisitor(Type); + impl<'de> Visitor<'de> for ResultVisitor { + type Value = Value; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter, + ) -> std::fmt::Result { + write!(formatter, "a result") + } + + fn visit_enum(self, data: A) -> Result + where + A: serde::de::EnumAccess<'de>, + { + let (v, variant) = data.variant()?; + match v { + "Ok" => { + let v = variant.newtype_variant_seed(Seed(self.0.clone()))?; + Ok(Value::from(runtime::builtins::result::Result::ok(Rc::new( + v, + )))) + } + "Err" => { + let v = variant.newtype_variant()?; + Ok(Value::from(runtime::builtins::result::Result::error(v))) + } + _ => unreachable!(), + } + } + } + let t = ts[0].clone(); + deserializer.deserialize_enum("Result", &["Ok", "Err"], ResultVisitor(t)) + } + "Vec" => { + struct VecVisitor(Type); + impl<'de> Visitor<'de> for VecVisitor { + type Value = Value; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter, + ) -> std::fmt::Result { + write!(formatter, "a vec") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: serde::de::SeqAccess<'de>, + { + let mut result = Vec::new(); + while let Some(v) = seq.next_element_seed(Seed(self.0.clone()))? { + result.push(v); + } + Ok(Value::from(runtime::builtins::vec::Vec::from(result))) + } + } + let t = ts[0].clone(); + deserializer.deserialize_seq(VecVisitor(t)) + } + // "Matrix" => { + // let Type::Cons(x, _) = &ts[0] else { + // unreachable!() + // }; + // let m = match x.data.as_str() { + // "i8" => Matrix::I8(runtime::builtins::matrix::Matrix::::deserialize( + // deserializer, + // )?), + // "i16" => Matrix::I16( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "i32" => Matrix::I32( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "i64" => Matrix::I64( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "u8" => Matrix::U8(runtime::builtins::matrix::Matrix::::deserialize( + // deserializer, + // )?), + // "u16" => Matrix::U16( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "u32" => Matrix::U32( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "u64" => Matrix::U64( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "f32" => Matrix::F32( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // "f64" => Matrix::F64( + // runtime::builtins::matrix::Matrix::::deserialize(deserializer)?, + // ), + // _ => unreachable!(), + // }; + // Ok(Value::from(m)) + // } + _ => unreachable!("Attempted to deserialize undeserializable type {:?}", x), + }, + Type::Generic(_) => unreachable!(), + Type::Array(t, n) => { + struct ArrayVisitor(Type); + impl<'de> Visitor<'de> for ArrayVisitor { + type Value = Value; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(formatter, "an array") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: serde::de::SeqAccess<'de>, + { + let mut result = Vec::new(); + while let Some(v) = seq.next_element_seed(Seed(self.0.clone()))? { + result.push(v); + } + Ok(Value::from(Array(result))) + } + } + let n = n.unwrap(); + deserializer.deserialize_tuple(n, ArrayVisitor(t.as_ref().clone())) + } + Type::Never => unreachable!(), + Type::Var(_) => Err(serde::de::Error::custom( + "Attempted to deserialize a type variable", + )), + Type::Err => unreachable!(), + Type::Alias(_, _) => unreachable!(), + Type::Assoc(_, _, _, _) => unreachable!(), + Type::Hole => unreachable!(), + Type::Unresolved(_) => todo!(), + } + } +} diff --git a/crates/compiler/src/builtins/dynamic/array.rs b/crates/compiler/src/builtins/dynamic/array.rs new file mode 100644 index 0000000..0b6f1e3 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/array.rs @@ -0,0 +1,6 @@ +use serde::Serialize; + +use crate::builtins::Value; + +#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub struct Array(pub Vec); diff --git a/crates/compiler/src/builtins/dynamic/dataflow.rs b/crates/compiler/src/builtins/dynamic/dataflow.rs new file mode 100644 index 0000000..1b71edb --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/dataflow.rs @@ -0,0 +1,29 @@ +use std::rc::Rc; + +use runtime::builtins::encoding::Encoding; +use runtime::builtins::writer::Writer; + +use crate::ast::Name; + +use super::stream::Stream; + +#[derive(Debug, Clone)] +pub struct Dataflow { + pub streams: Vec, + pub sinks: Vec, +} + +impl Dataflow { + pub fn new(streams: Vec, sinks: Vec) -> Self { + Self { streams, sinks } + } +} + +#[derive(Debug, Clone)] +pub struct Sink(pub Rc<(Name, Writer, Encoding)>); + +impl Sink { + pub fn new(stream: Name, writer: Writer, encoding: Encoding) -> Self { + Self(Rc::new((stream, writer, encoding))) + } +} diff --git a/crates/compiler/src/builtins/dynamic/function.rs b/crates/compiler/src/builtins/dynamic/function.rs new file mode 100644 index 0000000..17b8ae2 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/function.rs @@ -0,0 +1,14 @@ +use crate::ast::Name; +use crate::ast::Type; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Fun { + pub name: Name, + pub ts: Vec, +} + +impl Fun { + pub fn new(name: Name, ts: Vec) -> Fun { + Fun { name, ts } + } +} diff --git a/crates/compiler/src/builtins/dynamic/instance.rs b/crates/compiler/src/builtins/dynamic/instance.rs new file mode 100644 index 0000000..a140fca --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/instance.rs @@ -0,0 +1,6 @@ +use runtime::builtins::path::Path; + +#[derive(Debug, Clone)] +pub struct Instance { + pub log: Path, +} diff --git a/crates/compiler/src/builtins/dynamic/matrix.rs b/crates/compiler/src/builtins/dynamic/matrix.rs new file mode 100644 index 0000000..8755498 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/matrix.rs @@ -0,0 +1,174 @@ +use serde::Serialize; + +#[derive(Clone, Serialize)] +#[serde(untagged)] +pub enum Matrix { + I8(runtime::builtins::matrix::Matrix), + I16(runtime::builtins::matrix::Matrix), + I32(runtime::builtins::matrix::Matrix), + I64(runtime::builtins::matrix::Matrix), + U8(runtime::builtins::matrix::Matrix), + U16(runtime::builtins::matrix::Matrix), + U32(runtime::builtins::matrix::Matrix), + U64(runtime::builtins::matrix::Matrix), + F32(runtime::builtins::matrix::Matrix), + F64(runtime::builtins::matrix::Matrix), +} + +impl std::fmt::Debug for Matrix { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Matrix::I8(v) => v.fmt(f), + Matrix::I16(v) => v.fmt(f), + Matrix::I32(v) => v.fmt(f), + Matrix::I64(v) => v.fmt(f), + Matrix::U8(v) => v.fmt(f), + Matrix::U16(v) => v.fmt(f), + Matrix::U32(v) => v.fmt(f), + Matrix::U64(v) => v.fmt(f), + Matrix::F32(v) => v.fmt(f), + Matrix::F64(v) => v.fmt(f), + } + } +} + +impl Matrix { + pub fn as_i8(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::I8(v) => v, + _ => unreachable!(), + } + } + pub fn as_i16(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::I16(v) => v, + _ => unreachable!(), + } + } + pub fn as_i32(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::I32(v) => v, + _ => unreachable!(), + } + } + pub fn as_i64(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::I64(v) => v, + _ => unreachable!(), + } + } + pub fn as_u8(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::U8(v) => v, + _ => unreachable!(), + } + } + pub fn as_u16(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::U16(v) => v, + _ => unreachable!(), + } + } + pub fn as_u32(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::U32(v) => v, + _ => unreachable!(), + } + } + pub fn as_u64(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::U64(v) => v, + _ => unreachable!(), + } + } + pub fn as_f32(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::F32(v) => v, + _ => unreachable!(), + } + } + pub fn as_f64(self) -> runtime::builtins::matrix::Matrix { + match self { + Matrix::F64(v) => v, + _ => unreachable!(), + } + } +} + +#[macro_export] +macro_rules! map_matrix { + { $v:expr, $f:expr } => { + match $v { + Matrix::I8(v) => $f(v), + Matrix::I16(v) => $f(v), + Matrix::I32(v) => $f(v), + Matrix::I64(v) => $f(v), + Matrix::U8(v) => $f(v), + Matrix::U16(v) => $f(v), + Matrix::U32(v) => $f(v), + Matrix::U64(v) => $f(v), + Matrix::F32(v) => $f(v), + Matrix::F64(v) => $f(v), + } + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::I8(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::I16(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::I32(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::I64(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::U8(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::U16(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::U32(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::U64(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::F32(v) + } +} + +impl From> for Matrix { + fn from(v: runtime::builtins::matrix::Matrix) -> Self { + Matrix::F64(v) + } +} diff --git a/crates/compiler/src/builtins/dynamic/record.rs b/crates/compiler/src/builtins/dynamic/record.rs new file mode 100644 index 0000000..84f50f6 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/record.rs @@ -0,0 +1,27 @@ +use serde::ser::SerializeMap; +use serde::Serialize; + +use crate::ast::Name; +use crate::builtins::Value; + +#[derive(Debug, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)] +pub struct Record(pub Vec<(Name, Value)>); + +impl Record { + pub fn new(fields: Vec<(Name, Value)>) -> Record { + Record(fields) + } +} + +impl Serialize for Record { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut map = serializer.serialize_map(Some(self.0.len()))?; + for (name, value) in &self.0 { + map.serialize_entry(name, value)?; + } + map.end() + } +} diff --git a/crates/compiler/src/builtins/dynamic/stream.rs b/crates/compiler/src/builtins/dynamic/stream.rs new file mode 100644 index 0000000..f6f2895 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/stream.rs @@ -0,0 +1,27 @@ +use std::rc::Rc; + +use crate::ast::Name; +use runtime::prelude::Aggregator; +use runtime::prelude::Assigner; +use runtime::prelude::Encoding; +use runtime::prelude::Reader; +use runtime::prelude::TimeSource; +use runtime::prelude::Writer; + +use super::function::Fun; + +#[derive(Debug, Clone)] +pub enum Stream { + Source(Reader, Encoding, TimeSource), + Map(Rc, Fun), + Filter(Rc, Fun), + Flatten(Rc), + FlatMap(Rc, Fun), + Scan(Rc, Fun), + Keyby(Rc, Fun), + Unkey(Rc), + Apply(Rc, Fun), + Window(Rc, Assigner, Aggregator), + Merge(Rc, Rc, Vec), + Sink(Rc, Writer, Encoding), +} diff --git a/crates/compiler/src/builtins/dynamic/tuple.rs b/crates/compiler/src/builtins/dynamic/tuple.rs new file mode 100644 index 0000000..02bd358 --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/tuple.rs @@ -0,0 +1,12 @@ +use serde::Serialize; + +use crate::builtins::Value; + +#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub struct Tuple(pub Vec); + +impl Tuple { + pub fn new(values: Vec) -> Tuple { + Tuple(values) + } +} diff --git a/crates/compiler/src/builtins/dynamic/variant.rs b/crates/compiler/src/builtins/dynamic/variant.rs new file mode 100644 index 0000000..1f6be8a --- /dev/null +++ b/crates/compiler/src/builtins/dynamic/variant.rs @@ -0,0 +1,20 @@ +use std::rc::Rc; + +use crate::ast::Name; +use crate::builtins::Value; +use serde::Serialize; + +#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub struct Variant { + pub name: Name, + pub value: Rc, +} + +impl Variant { + pub fn new(name: Name, value: Value) -> Variant { + Variant { + name, + value: Rc::new(value), + } + } +} diff --git a/crates/compiler/src/builtins/eq.rs b/crates/compiler/src/builtins/eq.rs new file mode 100644 index 0000000..17d99e5 --- /dev/null +++ b/crates/compiler/src/builtins/eq.rs @@ -0,0 +1,67 @@ +// use super::Matrix; +use super::Value; + +impl PartialEq for Value { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (Value::Aggregator(_), Value::Aggregator(_)) => unreachable!(), + (Value::Array(a), Value::Array(b)) => a == b, + (Value::Blob(_), Value::Blob(_)) => unreachable!(), + (Value::Bool(a), Value::Bool(b)) => a == b, + (Value::Char(a), Value::Char(b)) => a == b, + (Value::Discretizer(_), Value::Discretizer(_)) => unreachable!(), + (Value::Duration(a), Value::Duration(b)) => a == b, + (Value::Encoding(a), Value::Encoding(b)) => a == b, + (Value::F32(_), Value::F32(_)) => unreachable!(), + (Value::F64(_), Value::F64(_)) => unreachable!(), + (Value::File(_), Value::File(_)) => unreachable!(), + (Value::Fun(a), Value::Fun(b)) => a == b, + (Value::I8(a), Value::I8(b)) => a == b, + (Value::I16(a), Value::I16(b)) => a == b, + (Value::I32(a), Value::I32(b)) => a == b, + (Value::I64(a), Value::I64(b)) => a == b, + (Value::U8(a), Value::U8(b)) => a == b, + (Value::U16(a), Value::U16(b)) => a == b, + (Value::U32(a), Value::U32(b)) => a == b, + (Value::U64(a), Value::U64(b)) => a == b, + // (Value::Matrix(a), Value::Matrix(b)) => match (a, b) { + // (Matrix::I8(a), Matrix::I8(b)) => a == b, + // (Matrix::I16(a), Matrix::I16(b)) => a == b, + // (Matrix::I32(a), Matrix::I32(b)) => a == b, + // (Matrix::I64(a), Matrix::I64(b)) => a == b, + // (Matrix::U8(a), Matrix::U8(b)) => a == b, + // (Matrix::U16(a), Matrix::U16(b)) => a == b, + // (Matrix::U32(a), Matrix::U32(b)) => a == b, + // (Matrix::U64(a), Matrix::U64(b)) => a == b, + // (Matrix::F32(_), Matrix::F32(_)) => unreachable!(), + // (Matrix::F64(_), Matrix::F64(_)) => unreachable!(), + // _ => unreachable!(), + // }, + // (Value::Model(_), Value::Model(_)) => unreachable!(), + (Value::Option(a), Value::Option(b)) => a == b, + (Value::Path(a), Value::Path(b)) => a == b, + (Value::Reader(_), Value::Reader(_)) => unreachable!(), + (Value::Record(a), Value::Record(b)) => a == b, + (Value::Variant(a), Value::Variant(b)) => a == b, + (Value::Result(a), Value::Result(b)) => a == b, + (Value::SocketAddr(a), Value::SocketAddr(b)) => a == b, + (Value::Stream(_), Value::Stream(_)) => unreachable!(), + (Value::String(a), Value::String(b)) => a == b, + (Value::Time(a), Value::Time(b)) => a == b, + (Value::TimeSource(_), Value::TimeSource(_)) => unreachable!(), + (Value::Tuple(a), Value::Tuple(b)) => a == b, + (Value::Usize(a), Value::Usize(b)) => a == b, + // (Value::Url(a), Value::Url(b)) => a == b, + (Value::Vec(a), Value::Vec(b)) => a == b, + (Value::Writer(_), Value::Writer(_)) => unreachable!(), + (Value::Dict(a), Value::Dict(b)) => a == b, + (Value::Set(a), Value::Set(b)) => a == b, + _ => unreachable!( + "Attempted to compare incompatible types \n{:?} \nand \n{:?}", + self, other + ), + } + } +} + +impl Eq for Value {} diff --git a/crates/compiler/src/builtins/hash.rs b/crates/compiler/src/builtins/hash.rs new file mode 100644 index 0000000..1546ad8 --- /dev/null +++ b/crates/compiler/src/builtins/hash.rs @@ -0,0 +1,55 @@ +use std::hash::Hash; + +use super::Value; + +impl Hash for Value { + fn hash(&self, state: &mut H) { + match self { + Value::Aggregator(_) => unreachable!(), + Value::Array(v) => v.hash(state), + Value::Blob(_) => unreachable!(), + Value::Bool(v) => v.hash(state), + Value::Char(v) => v.hash(state), + Value::Discretizer(_) => unreachable!(), + Value::Duration(v) => v.hash(state), + Value::Encoding(_) => unreachable!(), + Value::F64(_) => unreachable!(), + Value::File(_) => unreachable!(), + Value::Fun(_) => unreachable!(), + Value::I32(v) => v.hash(state), + // Value::Matrix(_) => unreachable!(), + // Value::Model(_) => unreachable!(), + Value::Option(v) => v.hash(state), + Value::Path(v) => v.hash(state), + Value::Reader(_) => unreachable!(), + Value::Record(v) => v.hash(state), + Value::Variant(v) => v.hash(state), + Value::Result(v) => v.hash(state), + Value::SocketAddr(_) => unreachable!(), + Value::Stream(_) => unreachable!(), + Value::String(v) => v.hash(state), + Value::Time(v) => v.hash(state), + Value::TimeSource(_) => unreachable!(), + Value::Tuple(v) => v.hash(state), + Value::Usize(v) => v.hash(state), + // Value::Url(v) => v.hash(state), + Value::Vec(v) => v.hash(state), + Value::Writer(_) => unreachable!(), + Value::Dict(_) => unreachable!(), + Value::F32(_) => unreachable!(), + Value::I128(v) => v.hash(state), + Value::I16(v) => v.hash(state), + Value::I64(v) => v.hash(state), + Value::I8(v) => v.hash(state), + // Value::Image(_) => unreachable!(), + Value::Set(_) => unreachable!(), + Value::Dataflow(_) => unreachable!(), + Value::U128(v) => v.hash(state), + Value::U16(v) => v.hash(state), + Value::U32(v) => v.hash(state), + Value::U64(v) => v.hash(state), + Value::U8(v) => v.hash(state), + Value::Instance(_) => unreachable!(), + } + } +} diff --git a/crates/compiler/src/builtins/mod.rs b/crates/compiler/src/builtins/mod.rs new file mode 100644 index 0000000..5827aec --- /dev/null +++ b/crates/compiler/src/builtins/mod.rs @@ -0,0 +1,150 @@ +pub mod dynamic { + pub mod array; + pub mod dataflow; + pub mod function; + pub mod instance; + // pub mod matrix; + pub mod record; + pub mod stream; + pub mod tuple; + pub mod variant; +} + +mod conv; +pub mod de; +mod eq; +mod hash; +mod ord; +mod ser; + +pub use dynamic::array::Array; +pub use dynamic::dataflow::Dataflow; +pub use dynamic::dataflow::Sink; +pub use dynamic::function::Fun; +pub use dynamic::instance::Instance; +// pub use dynamic::matrix::Matrix; +pub use dynamic::record::Record; +pub use dynamic::stream::Stream; +pub use dynamic::tuple::Tuple; +pub use dynamic::variant::Variant; + +use runtime::prelude::Aggregator; +use runtime::prelude::Assigner; +use runtime::prelude::Blob; +use runtime::prelude::Dict; +use runtime::prelude::Duration; +use runtime::prelude::Encoding; +use runtime::prelude::File; +// use runtime::prelude::Image; +// use runtime::prelude::Model; +use runtime::prelude::Path; +use runtime::prelude::Reader; +use runtime::prelude::Set; +use runtime::prelude::SocketAddr; +use runtime::prelude::Time; +use runtime::prelude::TimeSource; +// use runtime::prelude::Url; +use runtime::prelude::Writer; + +use std::rc::Rc; + +#[derive(Clone)] +pub enum Value { + Aggregator(Aggregator), + Array(Array), + Blob(Blob), + Bool(bool), + Char(char), + Dict(Dict), + Discretizer(Assigner), + Duration(Duration), + Encoding(Encoding), + F32(f32), + F64(f64), + File(File), + Fun(Fun), + I128(i128), + I16(i16), + I32(i32), + I64(i64), + I8(i8), + // Image(Image), + // Matrix(Matrix), + // Model(Model), + Option(runtime::builtins::option::Option>), + Path(Path), + Reader(Reader), + Record(Record), + Result(runtime::builtins::result::Result>), + Set(Set), + SocketAddr(SocketAddr), + Stream(Stream), + Dataflow(Dataflow), + String(runtime::builtins::im_string::String), + Time(Time), + TimeSource(TimeSource), + Tuple(Tuple), + U128(u128), + U16(u16), + U32(u32), + U64(u64), + U8(u8), + // Url(Url), + Usize(usize), + Variant(Variant), + Vec(runtime::builtins::vec::Vec), + Writer(Writer), + Instance(Instance), +} + +impl std::fmt::Debug for Value { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Value::Aggregator(v) => v.fmt(f), + Value::Array(v) => v.fmt(f), + Value::Blob(v) => v.fmt(f), + Value::Bool(v) => v.fmt(f), + Value::Char(v) => v.fmt(f), + Value::Dict(v) => v.fmt(f), + Value::Discretizer(v) => v.fmt(f), + Value::Duration(v) => v.fmt(f), + Value::Encoding(v) => v.fmt(f), + Value::F32(v) => v.fmt(f), + Value::F64(v) => v.fmt(f), + Value::File(v) => v.fmt(f), + Value::Fun(v) => v.fmt(f), + Value::I128(v) => v.fmt(f), + Value::I16(v) => v.fmt(f), + Value::I32(v) => v.fmt(f), + Value::I64(v) => v.fmt(f), + Value::I8(v) => v.fmt(f), + // Value::Matrix(v) => v.fmt(f), + // Value::Model(v) => v.fmt(f), + Value::Option(v) => v.fmt(f), + Value::Path(v) => v.fmt(f), + Value::Reader(v) => v.fmt(f), + Value::Record(v) => v.fmt(f), + Value::Result(v) => v.fmt(f), + Value::Set(v) => v.fmt(f), + Value::SocketAddr(v) => v.fmt(f), + Value::Stream(v) => v.fmt(f), + Value::Dataflow(v) => v.fmt(f), + Value::String(v) => v.fmt(f), + Value::Time(v) => v.fmt(f), + Value::TimeSource(v) => v.fmt(f), + Value::Tuple(v) => v.fmt(f), + Value::U128(v) => v.fmt(f), + Value::U16(v) => v.fmt(f), + Value::U32(v) => v.fmt(f), + Value::U64(v) => v.fmt(f), + Value::U8(v) => v.fmt(f), + // Value::Url(v) => v.fmt(f), + Value::Usize(v) => v.fmt(f), + Value::Variant(v) => v.fmt(f), + Value::Vec(v) => v.fmt(f), + Value::Writer(v) => v.fmt(f), + Value::Instance(v) => v.fmt(f), + // Value::Image(v) => v.fmt(f), + } + } +} diff --git a/crates/compiler/src/builtins/ord.rs b/crates/compiler/src/builtins/ord.rs new file mode 100644 index 0000000..9f2c949 --- /dev/null +++ b/crates/compiler/src/builtins/ord.rs @@ -0,0 +1,61 @@ +use super::Value; + +#[allow(clippy::non_canonical_partial_ord_impl)] +impl PartialOrd for Value { + fn partial_cmp(&self, other: &Self) -> Option { + match (self, other) { + (Value::F32(a), Value::F32(b)) => a.partial_cmp(b), + (Value::F64(a), Value::F64(b)) => a.partial_cmp(b), + _ => Some(self.cmp(other)), + } + } +} + +impl Ord for Value { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + match (self, other) { + (Value::Aggregator(_), Value::Aggregator(_)) => unreachable!(), + (Value::Array(a), Value::Array(b)) => a.cmp(b), + (Value::Blob(_), Value::Blob(_)) => unreachable!(), + (Value::Bool(a), Value::Bool(b)) => a.cmp(b), + (Value::Char(a), Value::Char(b)) => a.cmp(b), + (Value::Discretizer(_), Value::Discretizer(_)) => unreachable!(), + (Value::Duration(a), Value::Duration(b)) => a.cmp(b), + (Value::Encoding(a), Value::Encoding(b)) => a.cmp(b), + (Value::F32(_), Value::F32(_)) => unreachable!(), + (Value::F64(_), Value::F64(_)) => unreachable!(), + (Value::File(_), Value::File(_)) => unreachable!(), + (Value::Fun(_), Value::Fun(_)) => unreachable!(), + (Value::I8(a), Value::I8(b)) => a.cmp(b), + (Value::I16(a), Value::I16(b)) => a.cmp(b), + (Value::I32(a), Value::I32(b)) => a.cmp(b), + (Value::I64(a), Value::I64(b)) => a.cmp(b), + (Value::U8(a), Value::U8(b)) => a.cmp(b), + (Value::U16(a), Value::U16(b)) => a.cmp(b), + (Value::U32(a), Value::U32(b)) => a.cmp(b), + (Value::U64(a), Value::U64(b)) => a.cmp(b), + (Value::Usize(a), Value::Usize(b)) => a.cmp(b), + // (Value::Matrix(_), Value::Matrix(_)) => unreachable!(), + // (Value::Model(_), Value::Model(_)) => unreachable!(), + (Value::Option(a), Value::Option(b)) => a.cmp(b), + (Value::Path(a), Value::Path(b)) => a.cmp(b), + (Value::Reader(_), Value::Reader(_)) => unreachable!(), + (Value::Record(a), Value::Record(b)) => a.cmp(b), + (Value::Variant(a), Value::Variant(b)) => a.cmp(b), + (Value::Result(a), Value::Result(b)) => a.cmp(b), + (Value::SocketAddr(a), Value::SocketAddr(b)) => a.cmp(b), + (Value::Stream(_), Value::Stream(_)) => unreachable!(), + (Value::String(a), Value::String(b)) => a.cmp(b), + (Value::Time(a), Value::Time(b)) => a.cmp(b), + (Value::TimeSource(_), Value::TimeSource(_)) => unreachable!(), + (Value::Tuple(a), Value::Tuple(b)) => a.cmp(b), + // (Value::Url(a), Value::Url(b)) => a.cmp(b), + (Value::Vec(a), Value::Vec(b)) => a.cmp(b), + (Value::Writer(_), Value::Writer(_)) => unreachable!(), + (x, y) if std::mem::discriminant(x) == std::mem::discriminant(y) => { + panic!("uncovered case") + } + _ => unreachable!(), + } + } +} diff --git a/crates/compiler/src/builtins/ser.rs b/crates/compiler/src/builtins/ser.rs new file mode 100644 index 0000000..6a5dfe9 --- /dev/null +++ b/crates/compiler/src/builtins/ser.rs @@ -0,0 +1,58 @@ +use serde::Serialize; + +use super::Value; + +impl Serialize for Value { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + Value::Aggregator(_) => unreachable!(), + Value::Array(v) => v.serialize(serializer), + Value::Blob(v) => v.serialize(serializer), + Value::Bool(v) => v.serialize(serializer), + Value::Char(v) => v.serialize(serializer), + Value::Dict(v) => v.serialize(serializer), + Value::Discretizer(v) => v.serialize(serializer), + Value::Duration(v) => v.serialize(serializer), + Value::Encoding(v) => v.serialize(serializer), + Value::F32(v) => v.serialize(serializer), + Value::F64(v) => v.serialize(serializer), + Value::File(_) => unreachable!(), + Value::Fun(_) => unreachable!(), + Value::I128(v) => v.serialize(serializer), + Value::I16(v) => v.serialize(serializer), + Value::I32(v) => v.serialize(serializer), + Value::I64(v) => v.serialize(serializer), + Value::I8(v) => v.serialize(serializer), + // Value::Matrix(v) => v.serialize(serializer), + // Value::Model(v) => v.serialize(serializer), + Value::Option(v) => v.serialize(serializer), + Value::Path(v) => v.serialize(serializer), + Value::Reader(v) => v.serialize(serializer), + Value::Record(v) => v.serialize(serializer), + Value::Result(v) => v.serialize(serializer), + Value::Set(v) => v.serialize(serializer), + Value::SocketAddr(v) => v.serialize(serializer), + Value::Stream(_) => unreachable!(), + Value::String(v) => v.serialize(serializer), + Value::Time(v) => v.serialize(serializer), + Value::TimeSource(_) => unreachable!(), + Value::Tuple(v) => v.serialize(serializer), + Value::U128(v) => v.serialize(serializer), + Value::U16(v) => v.serialize(serializer), + Value::U32(v) => v.serialize(serializer), + Value::U64(v) => v.serialize(serializer), + Value::U8(v) => v.serialize(serializer), + // Value::Url(v) => v.serialize(serializer), + Value::Usize(v) => v.serialize(serializer), + Value::Variant(v) => v.serialize(serializer), + Value::Vec(v) => v.serialize(serializer), + Value::Writer(v) => v.serialize(serializer), + Value::Dataflow(_) => unreachable!(), + Value::Instance(_) => unreachable!(), + // Value::Image(v) => v.serialize(serializer), + } + } +} diff --git a/crates/compiler/src/bytecode.rs b/crates/compiler/src/bytecode.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/compiler/src/codegen.rs b/crates/compiler/src/codegen.rs new file mode 100644 index 0000000..6dd8328 --- /dev/null +++ b/crates/compiler/src/codegen.rs @@ -0,0 +1,632 @@ +#![allow(unused)] +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Index; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::Program; +use crate::ast::Query; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::TraitType; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::print::Print; + +pub struct Wrapper(T); + +impl<'a> std::fmt::Display for Wrapper<&'a Program> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut p = Rust::new(f); + p.type_info = true; + p.program(self.0) + } +} + +impl<'a, 'b> Print<'b> for Rust<'a, 'b> { + fn fmt(&mut self) -> &mut std::fmt::Formatter<'b> { + self.f + } + + fn get_indent(&mut self) -> &mut usize { + &mut self.indent_level + } + + fn should_indent(&mut self) -> bool { + self.noindent + } +} + +impl Program { + pub fn rust(&self) -> Wrapper<&Self> { + Wrapper(self) + } +} + +pub struct Rust<'a, 'b> { + f: &'a mut std::fmt::Formatter<'b>, + noindent: bool, + indent_level: usize, + type_info: bool, +} + +impl<'a, 'b> Rust<'a, 'b> { + fn new(f: &'a mut std::fmt::Formatter<'b>) -> Rust<'a, 'b> { + Rust { + f, + noindent: false, + indent_level: 0, + type_info: false, + } + } + + fn program(&mut self, p: &Program) -> std::fmt::Result { + self.newline_sep(&p.stmts, Self::stmt) + } + + fn param(&mut self, p: &Param) -> std::fmt::Result { + self.name(&p.name)?; + self.punct(":")?; + self.space()?; + self.ty(&p.ty) + } + + fn stmt(&mut self, s: &Stmt) -> std::fmt::Result { + match s { + Stmt::Var(s) => self.stmt_var(s), + Stmt::Def(s) => self.stmt_def(s), + Stmt::Impl(s) => self.stmt_impl(s), + Stmt::Expr(s) => self.stmt_expr(s), + Stmt::Struct(s) => self.stmt_struct(s), + Stmt::Enum(s) => self.stmt_enum(s), + Stmt::Type(s) => self.stmt_type(s), + Stmt::Trait(s) => self.stmt_trait(s), + Stmt::Err(_) => todo!(), + } + } + + fn stmt_var(&mut self, s: &StmtVar) -> std::fmt::Result { + self.kw("let")?; + self.space()?; + self.name(&s.name)?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(&s.expr)?; + self.punct(";") + } + + fn stmt_def(&mut self, s: &StmtDef) -> std::fmt::Result { + self.kw("fn")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.paren(|this| this.comma_sep(&s.params, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.where_clause(&s.where_clause)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.body(&s.body)?; + self.punct(";") + } + + fn body(&mut self, e: &Body) -> std::fmt::Result { + match e { + Body::Expr(e) => self.expr(e), + Body::Builtin => self.kw(""), + } + } + + fn stmt_impl(&mut self, s: &StmtImpl) -> std::fmt::Result { + self.kw("impl")?; + assert!(s.generics.is_empty()); + self.space()?; + self.bound(&s.head)?; + self.where_clause(&s.where_clause)?; + self.space()?; + self.brace(|this| { + this.indented(|this| { + this.newline_sep(&s.defs, Self::stmt_def)?; + this.newline_sep(&s.types, Self::stmt_type) + }) + }) + } + + fn where_clause(&mut self, ts: &[Bound]) -> std::fmt::Result { + if !ts.is_empty() { + self.space()?; + self.kw("where")?; + self.space()?; + self.comma_sep(ts, Self::bound)?; + } + Ok(()) + } + + fn stmt_expr(&mut self, s: &Expr) -> std::fmt::Result { + self.expr(s)?; + self.punct(";") + } + + fn stmt_struct(&mut self, s: &StmtStruct) -> std::fmt::Result { + self.kw("struct")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.fields(&s.fields, Self::annotate)?; + self.punct(";") + } + + fn stmt_enum(&mut self, s: &StmtEnum) -> std::fmt::Result { + self.kw("enum")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.space()?; + self.scope(&s.variants, Self::variant) + } + + fn variant(&mut self, (x, t): &(Name, Type)) -> std::fmt::Result { + self.name(x)?; + self.paren(|this| this.ty(t)) + } + + fn stmt_type(&mut self, s: &StmtType) -> std::fmt::Result { + self.kw("type")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.space()?; + self.punct("=")?; + self.space()?; + self.ty(&s.ty)?; + self.punct(";") + } + + fn stmt_trait(&mut self, s: &StmtTrait) -> std::fmt::Result { + self.kw("trait")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.space()?; + self.brace(|this| { + this.indented(|this| { + this.newline_sep(&s.defs, Self::stmt_def_decl)?; + this.newline_sep(&s.types, Self::stmt_type_decl) + }) + }) + } + + fn stmt_def_decl(&mut self, s: &TraitDef) -> std::fmt::Result { + self.kw("def")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.paren(|this| this.comma_sep(&s.params, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.punct(";") + } + + fn stmt_type_decl(&mut self, s: &TraitType) -> std::fmt::Result { + self.kw("type")?; + self.space()?; + self.name(&s.name)?; + assert!(s.generics.is_empty()); + self.space()?; + self.punct(";") + } + + fn type_args(&mut self, ts: &[Type]) -> std::fmt::Result { + if !ts.is_empty() { + self.brack(|this| this.comma_sep(ts, Self::ty))?; + } + Ok(()) + } + + fn _expr(&mut self, expr: &Expr) -> std::fmt::Result { + match expr { + Expr::Unresolved(_, _, p) => unreachable!(), + Expr::Int(_, _, v) => { + self.lit(v)?; + } + Expr::Float(_, _, v) => { + self.lit(v)?; + } + Expr::Bool(_, _, v) => { + self.lit(v)?; + } + Expr::String(_, _, s) => { + self.str(s)?; + } + Expr::Field(_, _, e, x) => { + self.expr(e)?; + self.punct(".")?; + self.name(x)?; + } + Expr::Tuple(_, _, es) => { + self.paren(|this| this.comma_sep_trailing(es, Self::expr))?; + } + Expr::Struct(_, _, name, ts, xes) => { + self.name(name)?; + self.type_args(ts)?; + self.fields(xes, Self::assign)?; + } + Expr::Enum(_, _, name, ts, x1, e) => { + self.name(name)?; + self.type_args(ts)?; + self.punct("::")?; + self.name(x1)?; + self.paren(|this| this.expr(e))?; + } + Expr::Var(_, _, x) => { + self.name(x)?; + } + Expr::Def(_, _, name, ts) => { + self.name(name)?; + self.type_args(ts)?; + } + Expr::Call(_, _, e, es) => { + self.expr(e)?; + self.paren(|this| this.comma_sep(es, Self::expr))?; + } + Expr::Block(_, _, ss, e) => { + self.brace(|this| { + this.indented(|this| { + this.newline_sep(ss, |this, s| this.stmt(s))?; + this.newline()?; + this.expr(e) + })?; + this.newline() + })?; + } + Expr::Query(_, _, qs) => { + self.newline_sep(qs, Self::query_stmt)?; + } + Expr::Assoc(_, _, x0, ts0, x1, ts1) => { + self.name(x0)?; + self.type_args(ts0)?; + self.punct("::")?; + self.name(x1)?; + self.type_args(ts1)?; + } + Expr::Index(_, _, e, i) => { + self.expr(e)?; + self.punct(".")?; + self.index(i)?; + } + Expr::Array(_, _, es) => { + self.brack(|this| this.comma_sep(es, Self::expr))?; + } + Expr::Err(_, _) => { + self.kw("")?; + } + Expr::Assign(_, _, e0, e1) => { + self.expr(e0)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(e1)?; + } + Expr::Return(_, _, e) => { + self.kw("return")?; + self.space()?; + self.expr(e)?; + } + Expr::Continue(_, _) => { + self.kw("continue")?; + } + Expr::Break(_, _) => { + self.kw("break")?; + } + Expr::Fun(_, _, ps, t, e) => { + self.kw("fun")?; + self.paren(|this| this.comma_sep(ps, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(t)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(e)?; + } + Expr::Match(_, _, e, arms) => { + self.kw("match")?; + self.space()?; + self.expr(e)?; + self.space()?; + self.scope(arms, Self::arm)?; + } + Expr::While(_, _, e0, e1) => { + self.kw("while")?; + self.space()?; + self.expr(e0)?; + self.space()?; + self.expr(e1)?; + } + Expr::Record(_, _, xts) => { + self.fields(xts, Self::assign)?; + } + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + Ok(()) + } + + fn arm(&mut self, (p, e): &(Pat, Expr)) -> std::fmt::Result { + self.pat(p)?; + self.space()?; + self.punct("=>")?; + self.space()?; + self.expr(e) + } + + fn expr(&mut self, expr: &Expr) -> std::fmt::Result { + if self.type_info { + self.paren(|this| { + this._expr(expr)?; + this.punct(":")?; + this.ty(expr.ty()) + })?; + } else { + self._expr(expr)?; + } + Ok(()) + } + + fn scan(&mut self, (x, e): &(Name, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct(" in ")?; + self.expr(e) + } + + fn assign(&mut self, (x, e): &(Name, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct(" = ")?; + self.expr(e) + } + + fn bind(&mut self, (p, e): &(Name, Pat)) -> std::fmt::Result { + self.name(p)?; + self.punct("=")?; + self.pat(e) + } + + fn annotate(&mut self, (x, t): &(Name, Type)) -> std::fmt::Result { + self.name(x)?; + self.punct(":")?; + self.ty(t) + } + + fn query_stmt(&mut self, q: &Query) -> std::fmt::Result { + match q { + Query::From(_, _, xes) => { + self.kw("from")?; + self.space()?; + self.comma_scope(xes, Self::scan)?; + } + Query::Where(_, _, e) => { + self.kw("where")?; + self.space()?; + self.expr(e)?; + } + Query::Select(_, _, xes) => { + self.kw("select")?; + self.space()?; + self.comma_scope(xes, Self::assign)?; + } + Query::Join(_, _, xes, e) => { + self.kw("join")?; + self.space()?; + self.comma_scope(xes, Self::scan)?; + self.space()?; + self.punct("on")?; + self.space()?; + self.expr(e)?; + } + Query::Group(_, _, xs, qs) => { + self.kw("group")?; + self.space()?; + self.comma_sep(xs, Self::name)?; + self.space()?; + self.comma_scope(qs, Self::query_stmt)?; + } + Query::Over(_, _, e, qs) => { + self.kw("over")?; + self.space()?; + self.expr(e)?; + self.comma_scope(qs, Self::query_stmt)?; + } + Query::Order(_, _, os) => { + self.kw("order")?; + self.space()?; + self.comma_sep(os, Self::ordering)?; + } + Query::With(_, _, xes) => { + self.kw("with")?; + self.space()?; + self.comma_scope(xes, Self::assign)?; + } + Query::Into(_, _, e) => { + self.kw("into")?; + self.space()?; + self.comma_sep(e, Self::expr)?; + } + Query::Compute(_, _, aggs) => { + self.kw("compute")?; + self.space()?; + self.comma_scope(aggs, Self::agg)?; + } + } + Ok(()) + } + + fn ordering(&mut self, (x, d): &(Name, bool)) -> std::fmt::Result { + self.name(x)?; + if *d { + self.space()?; + self.kw("desc")?; + } + Ok(()) + } + + fn agg(&mut self, (x, e0, e1): &(Name, Expr, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct("=")?; + self.expr(e0)?; + self.space()?; + self.kw("of")?; + self.space()?; + self.expr(e1) + } + + fn bound(&mut self, b: &Bound) -> std::fmt::Result { + match b { + Bound::Unresolved(..) => unreachable!(), + Bound::Trait(_, x, ts) => { + self.name(x)?; + self.type_args(ts)?; + } + Bound::Err(_) => unreachable!(), + } + Ok(()) + } + + fn ty(&mut self, t: &Type) -> std::fmt::Result { + match t { + Type::Cons(name, ts) => { + self.name(name)?; + self.type_args(ts)?; + } + Type::Assoc(x0, ts0, x1, ts1) => { + self.name(x0)?; + self.type_args(ts0)?; + self.punct("::")?; + self.name(x1)?; + self.type_args(ts1)?; + } + Type::Var(x) => { + self.punct("?")?; + self.name(x)?; + } + Type::Hole => { + self.punct("_")?; + } + Type::Err => { + self.kw("")?; + } + Type::Generic(x) => { + self.name(x)?; + } + Type::Fun(ts, t) => { + self.kw("fun")?; + self.paren(|this| this.comma_sep(ts, Self::ty))?; + self.punct(":")?; + self.space()?; + self.ty(t)?; + } + Type::Tuple(ts) => { + self.paren(|this| this.comma_sep_trailing(ts, Self::ty))?; + } + Type::Record(xts) => { + self.fields(xts, Self::annotate)?; + } + Type::Alias(..) => unreachable!(), + Type::Unresolved(..) => unreachable!(), + Type::Array(t, n) => { + self.brack(|ctx| { + ctx.ty(t)?; + if let Some(n) = n { + ctx.punct(";")?; + ctx.lit(n)?; + } + Ok(()) + })?; + } + Type::Never => { + self.punct("!")?; + } + } + Ok(()) + } + + fn pat(&mut self, p: &Pat) -> std::fmt::Result { + if self.type_info { + self.paren(|this| { + this._pat(p)?; + this.punct(":")?; + this.ty(p.ty()) + }) + } else { + self._pat(p) + } + } + + fn _pat(&mut self, p: &Pat) -> std::fmt::Result { + match p { + Pat::Unresolved(..) => unreachable!(), + Pat::Var(_, _, x) => { + self.name(x)?; + } + Pat::Int(_, _, v) => { + write!(self.f, "{}", v)?; + } + Pat::Bool(_, _, v) => { + write!(self.f, "{}", v)?; + } + Pat::String(_, _, v) => { + write!(self.f, r#""{}""#, v)?; + } + Pat::Wildcard(_, _) => { + self.punct("_")?; + } + Pat::Tuple(_, _, ps) => { + self.paren(|this| this.comma_sep_trailing(ps, Self::pat))?; + } + Pat::Struct(_, _, x, ts, xps) => { + self.name(x)?; + self.type_args(ts)?; + self.fields(xps, Self::bind)?; + } + Pat::Enum(_, _, x0, ts, x1, p) => { + self.name(x0)?; + self.type_args(ts)?; + self.punct("::")?; + self.name(x1)?; + self.paren(|this| this.pat(p))?; + } + Pat::Err(_, _) => { + self.kw("")?; + } + } + Ok(()) + } + + fn fields( + &mut self, + items: &[T], + f: impl Fn(&mut Self, &T) -> std::fmt::Result, + ) -> std::fmt::Result { + if !items.is_empty() { + self.paren(|this| this.comma_sep(items, |this, item| f(this, item)))?; + } + Ok(()) + } +} diff --git a/crates/compiler/src/diag.rs b/crates/compiler/src/diag.rs new file mode 100644 index 0000000..29ee8ba --- /dev/null +++ b/crates/compiler/src/diag.rs @@ -0,0 +1,140 @@ +use std::io::Write; +use std::rc::Rc; + +use ariadne::Config; +use ariadne::Label; +use ariadne::ReportKind; +use ariadne::Source; + +use crate::lexer::Span; + +#[derive(Default, Clone)] +pub struct Sources(Vec<(String, Source>)>); + +impl Sources { + pub fn new() -> Self { + Self(vec![]) + } + + pub fn next_file(&self) -> u16 { + self.0.len() as u16 + } + + pub fn add(&mut self, name: impl ToString, data: impl Into>) -> u16 { + let id = self.0.len() as u16; + self.0.push((name.to_string(), Source::from(data.into()))); + id + } +} + +impl std::ops::Index for Sources { + type Output = Source>; + + fn index(&self, index: u16) -> &Self::Output { + &self.0[index as usize].1 + } +} + +impl std::fmt::Debug for Sources { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let names = self.0.iter().map(|(x, _)| x).collect::>(); + f.debug_struct("Sources").field("sources", &names).finish() + } +} + +impl ariadne::Cache for Sources { + type Storage = Rc; + + fn fetch(&mut self, id: &u16) -> Result<&Source, Box> { + self.0 + .get(*id as usize) + .map(|(_, s)| s) + .ok_or_else(|| Box::new(format!("Source with id {} not found in cache", id)) as Box<_>) + } + + fn display<'b>(&self, id: &'b u16) -> Option> { + self.0 + .get(*id as usize) + .map(|x| Box::new(x.0.clone()) as Box<_>) + } +} + +impl ariadne::Span for Span { + fn start(&self) -> usize { + *self.start() as usize + } + + fn end(&self) -> usize { + *self.end() as usize + } + + type SourceId = u16; + + fn source(&self) -> &Self::SourceId { + self.file() + } +} + +#[derive(Debug, Default)] +pub struct Report(pub Vec>); + +impl Report { + pub fn new() -> Self { + Self(Vec::new()) + } + + pub fn merge(&mut self, other: &mut Report) { + self.0.append(&mut other.0); + } + + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + pub fn err(&mut self, span: Span, label: impl AsRef, msg: impl AsRef) { + let kind = ReportKind::Error; + let report = ariadne::Report::build(kind, *span.file(), *span.start() as usize) + .with_label(Label::new(span).with_message(msg.as_ref())) + .with_message(label.as_ref()) + .with_config(Config::default().with_color(false)) + .finish(); + self.0.push(report); + } + + pub fn err2( + &mut self, + s0: Span, + s1: Span, + label: impl AsRef, + msg0: impl AsRef, + msg1: impl AsRef, + ) { + let kind = ReportKind::Error; + let report = ariadne::Report::build(kind, *s0.file(), *s0.start() as usize) + .with_label(Label::new(s0).with_message(msg0.as_ref())) + .with_label(Label::new(s1).with_message(msg1.as_ref())) + .with_message(label.as_ref()) + .with_config(Config::default().with_color(false)) + .finish(); + self.0.push(report); + } + + pub fn print(&mut self, mut sources: &mut Sources) -> std::io::Result<()> { + for diag in self.0.drain(..) { + diag.eprint(&mut sources)?; + } + Ok(()) + } + + pub fn string( + &mut self, + mut sources: &mut Sources, + ) -> Result { + let mut buf = Vec::new(); + for diag in self.0.drain(..) { + diag.write(&mut sources, &mut buf).unwrap(); + writeln!(&mut buf).unwrap(); + } + String::from_utf8(buf) + } +} diff --git a/crates/compiler/src/display.rs b/crates/compiler/src/display.rs new file mode 100644 index 0000000..733a927 --- /dev/null +++ b/crates/compiler/src/display.rs @@ -0,0 +1,803 @@ +#![allow(unused)] +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Index; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::PatArg; +use crate::ast::Program; +use crate::ast::Query; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::TraitType; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::print::Print; + +pub struct Wrapper(T); + +impl Program { + pub fn display_types(&self) -> Wrapper<&Self> { + Wrapper(self) + } +} + +impl StmtImpl { + pub fn display_types(&self) -> Wrapper<&Self> { + Wrapper(self) + } +} + +impl Expr { + pub fn display_types(&self) -> Wrapper<&Self> { + Wrapper(self) + } +} + +impl<'a> std::fmt::Display for Wrapper<&'a Program> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut p = Pretty::new(f); + p.type_info = true; + p.program(self.0) + } +} + +impl std::fmt::Display for Wrapper<&StmtImpl> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut p = Pretty::new(f); + p.type_info = true; + p.stmt_impl(self.0) + } +} + +impl std::fmt::Display for Wrapper<&Expr> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut p = Pretty::new(f); + p.type_info = true; + p.expr(self.0) + } +} + +impl std::fmt::Display for Expr { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + Pretty::new(f).expr(self) + } +} + +impl std::fmt::Display for Program { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + Pretty::new(f).program(self) + } +} + +impl std::fmt::Display for Stmt { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).stmt(self) + } +} + +impl std::fmt::Display for Type { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).ty(self) + } +} + +impl std::fmt::Display for Name { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).name(self) + } +} + +impl std::fmt::Display for Index { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).index(self) + } +} + +impl std::fmt::Display for Pat { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).pat(self) + } +} + +impl std::fmt::Display for Bound { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).bound(self) + } +} + +impl std::fmt::Display for StmtImpl { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).stmt_impl(self) + } +} + +impl std::fmt::Display for StmtDef { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).stmt_def(self) + } +} + +impl std::fmt::Display for StmtVar { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).stmt_var(self) + } +} + +impl std::fmt::Display for StmtStruct { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Pretty::new(f).stmt_struct(self) + } +} + +impl<'a, 'b> Print<'b> for Pretty<'a, 'b> { + fn fmt(&mut self) -> &mut std::fmt::Formatter<'b> { + self.f + } + + fn get_indent(&mut self) -> &mut usize { + &mut self.indent_level + } + + fn should_indent(&mut self) -> bool { + self.noindent + } +} + +pub struct Pretty<'a, 'b> { + f: &'a mut std::fmt::Formatter<'b>, + noindent: bool, + indent_level: usize, + type_info: bool, +} + +impl<'a, 'b> Pretty<'a, 'b> { + fn new(f: &'a mut std::fmt::Formatter<'b>) -> Pretty<'a, 'b> { + Pretty { + f, + noindent: false, + indent_level: 0, + type_info: false, + } + } + + fn param(&mut self, p: &Param) -> std::fmt::Result { + self.name(&p.name)?; + self.punct(":")?; + self.space()?; + self.ty(&p.ty) + } + + fn program(&mut self, p: &Program) -> std::fmt::Result { + self.newline_sep(&p.stmts, Self::stmt) + } + + fn stmt(&mut self, s: &Stmt) -> std::fmt::Result { + match s { + Stmt::Var(s) => self.stmt_var(s), + Stmt::Def(s) => self.stmt_def(s), + Stmt::Impl(s) => self.stmt_impl(s), + Stmt::Expr(s) => self.stmt_expr(s), + Stmt::Struct(s) => self.stmt_struct(s), + Stmt::Enum(s) => self.stmt_enum(s), + Stmt::Type(s) => self.stmt_type(s), + Stmt::Trait(s) => self.stmt_trait(s), + Stmt::Err(_) => todo!(), + } + } + + fn stmt_var(&mut self, s: &StmtVar) -> std::fmt::Result { + self.kw("var")?; + self.space()?; + self.name(&s.name)?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(&s.expr)?; + self.punct(";") + } + + fn stmt_def(&mut self, s: &StmtDef) -> std::fmt::Result { + self.kw("def")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.paren(|this| this.comma_sep(&s.params, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.where_clause(&s.where_clause)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.body(&s.body)?; + self.punct(";") + } + + fn body(&mut self, e: &Body) -> std::fmt::Result { + match e { + Body::Expr(e) => self.expr(e), + Body::Builtin => self.kw(""), + } + } + + fn stmt_impl(&mut self, s: &StmtImpl) -> std::fmt::Result { + self.kw("impl")?; + self.generics(&s.generics)?; + self.space()?; + self.bound(&s.head)?; + self.where_clause(&s.where_clause)?; + self.space()?; + self.brace(|this| { + if !s.defs.is_empty() || !s.types.is_empty() { + this.indented(|this| { + this.newline()?; + this.newline_sep(&s.defs, Self::stmt_def)?; + this.newline_sep(&s.types, Self::stmt_type) + })?; + this.newline()?; + } + Ok(()) + }) + } + + fn where_clause(&mut self, ts: &[Bound]) -> std::fmt::Result { + if !ts.is_empty() { + self.space()?; + self.kw("where")?; + self.space()?; + self.comma_sep(ts, Self::bound)?; + } + Ok(()) + } + + fn stmt_expr(&mut self, s: &Expr) -> std::fmt::Result { + self.expr(s)?; + self.punct(";") + } + + fn stmt_struct(&mut self, s: &StmtStruct) -> std::fmt::Result { + self.kw("struct")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.fields(&s.fields, Self::annotate)?; + self.punct(";") + } + + fn stmt_enum(&mut self, s: &StmtEnum) -> std::fmt::Result { + self.kw("enum")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.space()?; + self.brace(|this| { + if !s.variants.is_empty() { + this.indented(|this| this.newline_comma_sep(&s.variants, Self::variant))?; + this.newline()?; + } + Ok(()) + }) + } + + fn variant(&mut self, (x, t): &(Name, Type)) -> std::fmt::Result { + self.name(x)?; + self.paren(|this| this.ty(t)) + } + + fn stmt_type(&mut self, s: &StmtType) -> std::fmt::Result { + self.kw("type")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.ty(&s.ty)?; + self.punct(";") + } + + fn stmt_trait(&mut self, s: &StmtTrait) -> std::fmt::Result { + self.kw("trait")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.space()?; + self.brace(|this| { + if !s.defs.is_empty() || !s.types.is_empty() { + this.indented(|this| { + this.newline()?; + this.newline_sep(&s.defs, Self::stmt_def_decl)?; + this.newline_sep(&s.types, Self::stmt_type_decl) + })?; + this.newline()?; + } + Ok(()) + }) + } + + fn stmt_def_decl(&mut self, s: &TraitDef) -> std::fmt::Result { + self.kw("def")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.paren(|this| this.comma_sep(&s.params, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(&s.ty)?; + self.punct(";") + } + + fn stmt_type_decl(&mut self, s: &TraitType) -> std::fmt::Result { + self.kw("type")?; + self.space()?; + self.name(&s.name)?; + self.generics(&s.generics)?; + self.space()?; + self.punct(";") + } + + fn generics(&mut self, gs: &[Name]) -> std::fmt::Result { + if !gs.is_empty() { + self.brack(|this| this.comma_sep(gs, Self::name))?; + } + Ok(()) + } + + fn type_args(&mut self, ts: &[Type]) -> std::fmt::Result { + if !ts.is_empty() { + self.brack(|this| this.comma_sep(ts, Self::ty))?; + } + Ok(()) + } + + fn _expr(&mut self, expr: &Expr) -> std::fmt::Result { + match expr { + Expr::Unresolved(_, _, p) => { + self.unresolved_path(p)?; + } + Expr::Int(_, _, v) => { + self.lit(v)?; + } + Expr::Float(_, _, v) => { + self.lit(v)?; + } + Expr::Bool(_, _, v) => { + self.lit(v)?; + } + Expr::String(_, _, s) => { + self.str(s)?; + } + Expr::Field(_, _, e, x) => { + self.expr(e)?; + self.punct(".")?; + self.name(x)?; + } + Expr::Tuple(_, _, es) => { + self.paren(|this| this.comma_sep_trailing(es, Self::expr))?; + } + Expr::Struct(_, _, name, ts, xes) => { + self.name(name)?; + self.type_args(ts)?; + self.fields(xes, Self::assign)?; + } + Expr::Enum(_, _, name, ts, x, e) => { + self.name(name)?; + self.type_args(ts)?; + self.punct("::")?; + self.name(x)?; + self.paren(|this| this.expr(e))?; + } + Expr::Var(_, _, x) => { + self.name(x)?; + } + Expr::Def(_, _, name, ts) => { + self.name(name)?; + self.type_args(ts)?; + } + Expr::Call(_, _, e, es) => { + self.expr(e)?; + self.paren(|this| this.comma_sep(es, Self::expr))?; + } + Expr::Block(_, _, ss, e) => { + self.brace(|this| { + this.indented(|this| { + this.newline_sep(ss, |this, s| this.stmt(s))?; + this.newline()?; + this.expr(e) + })?; + this.newline() + })?; + } + Expr::Query(_, _, qs) => { + self.newline_sep(qs, Self::query_stmt)?; + } + Expr::Assoc(_, _, x0, ts0, x1, ts1) => { + self.name(x0)?; + self.type_args(ts0)?; + self.punct("::")?; + self.name(x1)?; + self.type_args(ts1)?; + } + Expr::Index(_, _, e, i) => { + self.expr(e)?; + self.punct(".")?; + self.index(i)?; + } + Expr::Array(_, _, es) => { + self.brack(|this| this.comma_sep(es, Self::expr))?; + } + Expr::Err(_, _) => { + self.kw("")?; + } + Expr::Assign(_, _, e0, e1) => { + self.expr(e0)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(e1)?; + } + Expr::Return(_, _, e) => { + self.kw("return")?; + self.space()?; + self.expr(e)?; + } + Expr::Continue(_, _) => { + self.kw("continue")?; + } + Expr::Break(_, _) => { + self.kw("break")?; + } + Expr::Fun(_, _, ps, t, e) => { + self.kw("fun")?; + self.paren(|this| this.comma_sep(ps, Self::param))?; + self.punct(":")?; + self.space()?; + self.ty(t)?; + self.space()?; + self.punct("=")?; + self.space()?; + self.expr(e)?; + } + Expr::Match(_, _, e, arms) => { + self.kw("match")?; + self.space()?; + self.expr(e)?; + self.space()?; + self.scope(arms, Self::arm)?; + } + Expr::While(_, _, e0, e1) => { + self.kw("while")?; + self.space()?; + self.expr(e0)?; + self.space()?; + self.expr(e1)?; + } + Expr::Record(_, _, xts) => { + self.fields(xts, Self::assign)?; + } + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, t, e0, e1) => { + self.expr(e0)?; + self.space()?; + self.token(t)?; + self.space()?; + self.expr(e1)?; + } + Expr::Postfix(_, _, t, e) => { + self.expr(e)?; + self.space()?; + self.token(t)?; + } + Expr::Prefix(_, _, t, e) => { + self.token(t)?; + self.space()?; + self.expr(e)?; + } + } + Ok(()) + } + + fn arm(&mut self, (p, e): &(Pat, Expr)) -> std::fmt::Result { + self.pat(p)?; + self.space()?; + self.punct("=>")?; + self.space()?; + self.expr(e) + } + + fn expr(&mut self, expr: &Expr) -> std::fmt::Result { + if self.type_info { + self.paren(|this| { + this._expr(expr)?; + this.punct(":")?; + this.ty(expr.ty()) + })?; + } else { + self._expr(expr)?; + } + Ok(()) + } + + fn scan(&mut self, (x, e): &(Name, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct(" in ")?; + self.expr(e) + } + + fn assign(&mut self, (x, e): &(Name, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct(" = ")?; + self.expr(e) + } + + fn bind(&mut self, (p, e): &(Name, Pat)) -> std::fmt::Result { + self.name(p)?; + self.punct("=")?; + self.pat(e) + } + + fn annotate(&mut self, (x, t): &(Name, Type)) -> std::fmt::Result { + self.name(x)?; + self.punct(":")?; + self.ty(t) + } + + fn query_stmt(&mut self, q: &Query) -> std::fmt::Result { + match q { + Query::From(_, _, xes) => { + self.kw("from")?; + self.space()?; + self.comma_scope(xes, Self::scan)?; + } + Query::Where(_, _, e) => { + self.kw("where")?; + self.space()?; + self.expr(e)?; + } + Query::Select(_, _, xes) => { + self.kw("select")?; + self.space()?; + self.comma_scope(xes, Self::assign)?; + } + Query::Join(_, _, xes, e) => { + self.kw("join")?; + self.space()?; + self.comma_scope(xes, Self::scan)?; + self.space()?; + self.punct("on")?; + self.space()?; + self.expr(e)?; + } + Query::Group(_, _, xs, qs) => { + self.kw("group")?; + self.space()?; + self.comma_sep(xs, Self::name)?; + self.space()?; + self.comma_scope(qs, Self::query_stmt)?; + } + Query::Over(_, _, e, qs) => { + self.kw("over")?; + self.space()?; + self.expr(e)?; + self.comma_scope(qs, Self::query_stmt)?; + } + Query::Order(_, _, os) => { + self.kw("order")?; + self.space()?; + self.comma_sep(os, Self::ordering)?; + } + Query::With(_, _, xes) => { + self.kw("with")?; + self.space()?; + self.comma_scope(xes, Self::assign)?; + } + Query::Into(_, _, e) => { + self.kw("into")?; + self.space()?; + self.comma_sep(e, Self::expr)?; + } + Query::Compute(_, _, aggs) => { + self.kw("compute")?; + self.space()?; + self.comma_scope(aggs, Self::agg)?; + } + } + Ok(()) + } + + fn ordering(&mut self, (x, d): &(Name, bool)) -> std::fmt::Result { + self.name(x)?; + if *d { + self.space()?; + self.kw("desc")?; + } + Ok(()) + } + + fn agg(&mut self, (x, e0, e1): &(Name, Expr, Expr)) -> std::fmt::Result { + self.name(x)?; + self.punct("=")?; + self.expr(e0)?; + self.space()?; + self.kw("of")?; + self.space()?; + self.expr(e1) + } + + fn bound(&mut self, b: &Bound) -> std::fmt::Result { + match b { + Bound::Unresolved(_, path) => { + self.unresolved_path(path)?; + } + Bound::Trait(_, x, ts) => { + self.name(x)?; + self.type_args(ts)?; + } + Bound::Err(_) => { + self.kw("")?; + } + } + Ok(()) + } + + fn ty(&mut self, t: &Type) -> std::fmt::Result { + match t { + Type::Cons(name, ts) => { + self.name(name)?; + self.type_args(ts)?; + } + Type::Assoc(x0, ts0, x1, ts1) => { + self.name(x0)?; + self.type_args(ts0)?; + self.punct("::")?; + self.name(x1)?; + self.type_args(ts1)?; + } + Type::Var(x) => { + self.name(x)?; + } + Type::Hole => { + self.punct("_")?; + } + Type::Err => { + self.kw("")?; + } + Type::Generic(x) => { + self.name(x)?; + } + Type::Fun(ts, t) => { + self.kw("fun")?; + self.paren(|this| this.comma_sep(ts, Self::ty))?; + self.punct(":")?; + self.space()?; + self.ty(t)?; + } + Type::Tuple(ts) => { + self.paren(|this| this.comma_sep_trailing(ts, Self::ty))?; + } + Type::Record(xts) => { + self.fields(xts, Self::annotate)?; + } + Type::Alias(name, xts) => { + self.name(name)?; + self.type_args(xts)?; + } + Type::Unresolved(path) => { + self.unresolved_path(path)?; + } + Type::Array(t, n) => { + self.brack(|ctx| { + ctx.ty(t)?; + if let Some(n) = n { + ctx.punct(";")?; + ctx.lit(n)?; + } + Ok(()) + })?; + } + Type::Never => { + self.punct("!")?; + } + } + Ok(()) + } + + fn pat(&mut self, p: &Pat) -> std::fmt::Result { + if self.type_info { + self.paren(|this| { + this._pat(p)?; + this.punct(":")?; + this.ty(p.ty()) + }) + } else { + self._pat(p) + } + } + + fn _pat(&mut self, p: &Pat) -> std::fmt::Result { + match p { + Pat::Unresolved(_, _, path, args) => { + self.unresolved_path(path)?; + if let Some(args) = &args { + self.paren(|this| { + this.sep(",", true, args, |this, p| match p { + PatArg::Named(x, p) => { + this.name(x)?; + this.punct("=")?; + this.pat(p) + } + PatArg::Unnamed(p) => this.pat(p), + }) + })?; + } + } + Pat::Var(_, _, x) => { + self.name(x)?; + } + Pat::Int(_, _, v) => { + write!(self.f, "{}", v)?; + } + Pat::Bool(_, _, v) => { + write!(self.f, "{}", v)?; + } + Pat::String(_, _, v) => { + write!(self.f, r#""{}""#, v)?; + } + Pat::Wildcard(_, _) => { + self.punct("_")?; + } + Pat::Tuple(_, _, ps) => { + self.paren(|this| this.comma_sep_trailing(ps, Self::pat))?; + } + Pat::Struct(_, _, name, ts, xps) => { + self.name(name)?; + self.type_args(ts)?; + self.fields(xps, Self::bind)?; + } + Pat::Enum(_, _, name, ts, x1, p) => { + self.name(name)?; + self.type_args(ts)?; + self.punct("::")?; + self.name(x1)?; + self.paren(|this| this.pat(p))?; + } + Pat::Err(_, _) => { + self.kw("")?; + } + } + Ok(()) + } + + fn unresolved_path(&mut self, p: &UnresolvedPath) -> std::fmt::Result { + self.sep("::", false, &p.segments, Self::segment) + } + + fn segment(&mut self, (x, ts): &(Name, Vec)) -> std::fmt::Result { + self.name(x)?; + self.type_args(ts) + } + + fn fields( + &mut self, + items: &[T], + f: impl Fn(&mut Self, &T) -> std::fmt::Result, + ) -> std::fmt::Result { + if !items.is_empty() { + self.paren(|this| this.comma_sep(items, |this, item| f(this, item)))?; + } + Ok(()) + } +} diff --git a/crates/compiler/src/ffi.rs b/crates/compiler/src/ffi.rs new file mode 100644 index 0000000..cdbc862 --- /dev/null +++ b/crates/compiler/src/ffi.rs @@ -0,0 +1,66 @@ +use crate::ast; +use libffi::middle::Type; + +pub struct Ffi { + stack: Stack, +} + +impl Default for Ffi { + fn default() -> Self { + Self::new() + } +} + +struct Stack(Vec); + +impl Stack { + fn new() -> Self { + Self(vec![Scope::new()]) + } +} + +struct Scope(Vec); + +impl Scope { + fn new() -> Self { + Self(Vec::new()) + } +} + +enum Binding { + Cons(Type), +} + +impl Ffi { + pub fn new() -> Self { + Self::default() + } + + #[allow(clippy::only_used_in_recursion)] + pub fn ty(&mut self, t: ast::Type) -> Type { + match t { + ast::Type::Unresolved(_) => unreachable!(), + ast::Type::Cons(_, _) => todo!(), + ast::Type::Alias(_, _) => unreachable!(), + ast::Type::Assoc(_, _, _, _) => unreachable!(), + ast::Type::Var(_) => unreachable!(), + ast::Type::Generic(_) => unreachable!(), + ast::Type::Fun(_, _) => todo!(), + ast::Type::Tuple(ts) => { + let ts = ts.iter().map(|t| self.ty(t.clone())).collect::>(); + Type::structure(ts) + } + ast::Type::Record(xts) => { + let xts = xts + .iter() + .map(|(_, t)| self.ty(t.clone())) + .collect::>(); + Type::structure(xts) + } + ast::Type::Hole => unreachable!(), + ast::Type::Err => unreachable!(), + ast::Type::Array(_, _) => todo!(), + ast::Type::Never => unreachable!(), + } + } +} diff --git a/crates/compiler/src/helper.rs b/crates/compiler/src/helper.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/compiler/src/infer.rs b/crates/compiler/src/infer.rs new file mode 100644 index 0000000..7772b4b --- /dev/null +++ b/crates/compiler/src/infer.rs @@ -0,0 +1,668 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Candidate; +use crate::ast::Expr; +use crate::ast::Name; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::Type; +use crate::diag::Report; +use crate::lexer::Span; +use crate::util::ty; +use crate::util::ty_unit; + +impl Default for Context { + fn default() -> Self { + Self::new() + } +} + +#[derive(Debug)] +pub struct Context { + tvars: usize, + stack: Vec, + pub report: Report, +} + +#[derive(Default, Debug)] +pub struct Scope { + impls: Vec, + binds: Vec<(Name, Binding)>, +} + +impl Scope { + pub fn new() -> Scope { + Scope::default() + } +} + +#[derive(Debug, Clone)] +pub enum Binding { + Var(Span, Type), + TypeAlias(Span, Type, Vec), + Def(Span, Vec, Vec, Vec, Type), + Struct(Span, Vec, Vec<(Name, Type)>), + Enum(Span, Vec, Vec<(Name, Type)>), + Trait(StmtTrait), +} + +impl Context { + pub fn new() -> Context { + Context { + tvars: 0, + stack: vec![Scope::new()], + report: Report::new(), + } + } + + pub fn recover(&mut self, s0: Span, s1: Span, r: Result) { + if let Err((t0, t1)) = r { + self.report.err2( + s0, + s1, + "Type mismatch", + format!("Expected {t0}"), + format!("Found {t1}"), + ); + } + } + + pub fn new_tyvar(&mut self) -> Type { + self.tvars += 1; + Type::Var(Name::from(format!("?T{}", self.tvars - 1))) + } + + pub fn get(&self, x1: &Name) -> Option<&Binding> { + self.stack.iter().rev().find_map(|s| { + s.binds + .iter() + .rev() + .find(|(x0, _)| x0 == x1) + .map(|(_, b)| b) + }) + } + + pub fn bind(&mut self, name: Name, b: Binding) { + self.stack.last_mut().unwrap().binds.push((name, b)); + } + + pub fn scope(&mut self, f: impl FnOnce(&mut Context) -> T) -> T { + self.stack.push(Scope::new()); + let v = f(self); + self.stack.pop(); + v + } + + pub fn add_impl(&mut self, i: StmtImpl) { + self.stack.last_mut().unwrap().impls.push(i); + } + + pub fn impls(&self) -> Vec { + self.stack + .iter() + .rev() + .flat_map(|s| s.impls.clone()) + .collect() + } + + pub fn infer(&mut self, p: &Program) -> Program { + let mut goals = Vec::new(); + let mut sub = Vec::new(); + let program = p.annotate(self); + program.stmts.iter().for_each(|s| self.declare_stmt(s)); + let stmts = program + .stmts + .iter() + .map(|s| self.stmt(s, &mut sub, &mut goals)) + .collect::>(); + let impls = self.impls(); + for goal in goals { + if let Some(c) = solve(&goal, &impls, &[], &mut sub, self) { + match c { + crate::ast::Candidate::Impl(_) => {} + crate::ast::Candidate::Bound(_) => {} + } + } else { + self.report + .err(goal.span(), "Unsolved goal", "Could not solve goal"); + } + } + Program::new(stmts).map_type(&|t| t.apply(&sub)) + } + + pub fn declare_stmt(&mut self, s: &Stmt) { + match s { + Stmt::Var(_) => {} + Stmt::Def(s) => self.declare_stmt_def(s), + Stmt::Impl(s) => self.declare_stmt_impl(s), + Stmt::Expr(_) => {} + Stmt::Struct(s) => self.declare_stmt_struct(s), + Stmt::Enum(s) => self.declare_stmt_enum(s), + Stmt::Type(s) => self.declare_stmt_type(s), + Stmt::Trait(s) => self.declare_stmt_trait(s), + Stmt::Err(_) => todo!(), + } + } + + pub fn declare_stmt_def(&mut self, s: &StmtDef) { + let ts = s.params.iter().map(|p| p.ty.clone()).collect::>(); + self.bind( + s.name.clone(), + Binding::Def( + s.span, + s.generics.clone(), + s.where_clause.clone(), + ts, + s.ty.clone(), + ), + ); + } + + pub fn declare_stmt_impl(&mut self, s: &StmtImpl) { + self.add_impl(s.clone()); + } + + pub fn declare_stmt_struct(&mut self, s: &StmtStruct) { + let ts = s + .fields + .iter() + .map(|(x, t)| (x.clone(), t.clone())) + .collect::>(); + self.bind( + s.name.clone(), + Binding::Struct(s.span, s.generics.clone(), ts), + ); + } + + pub fn declare_stmt_enum(&mut self, s: &StmtEnum) { + let ts = s + .variants + .iter() + .map(|(x, t)| (x.clone(), t.clone())) + .collect::>(); + self.bind( + s.name.clone(), + Binding::Enum(s.span, s.generics.clone(), ts), + ); + } + + pub fn declare_stmt_type(&mut self, s: &StmtType) { + self.bind( + s.name.clone(), + Binding::TypeAlias(s.span, s.ty.clone(), s.generics.clone()), + ); + } + + pub fn declare_stmt_trait(&mut self, s: &StmtTrait) { + self.bind(s.name.clone(), Binding::Trait(s.clone())); + } + + pub fn stmt(&mut self, s: &Stmt, sub: &mut Vec<(Name, Type)>, goals: &mut Vec) -> Stmt { + match s { + Stmt::Var(s) => Stmt::Var(self.stmt_var(s, sub, goals)), + Stmt::Def(s) => Stmt::Def(self.stmt_def(s)), + Stmt::Impl(s) => Stmt::Impl(self.stmt_impl(s)), + Stmt::Expr(e) => Stmt::Expr(self.expr(e, sub, goals)), + Stmt::Struct(s) => Stmt::Struct(s.clone()), + Stmt::Enum(s) => Stmt::Enum(s.clone()), + Stmt::Type(s) => Stmt::Type(s.clone()), + Stmt::Trait(s) => Stmt::Trait(s.clone()), + Stmt::Err(_) => todo!(), + } + } + + pub fn stmt_var( + &mut self, + s: &StmtVar, + sub: &mut Vec<(Name, Type)>, + goals: &mut Vec, + ) -> StmtVar { + let e = self.expr(&s.expr, sub, goals); + self.recover(s.span, e.span(), unify(sub, &s.ty, e.ty())); + self.bind(s.name.clone(), Binding::Var(s.span, s.ty.clone())); + StmtVar::new(e.span(), s.name.clone(), s.ty.clone(), e) + } + + pub fn stmt_impl(&mut self, s: &StmtImpl) -> StmtImpl { + let span = s.span; + let generics = s.generics.clone(); + let head = s.head.clone(); + let defs = s.defs.iter().map(|d| self.stmt_def(d)).collect::>(); + let types = s.types.clone(); + let where_clause = s.where_clause.clone(); + StmtImpl::new(span, generics, head, where_clause, defs, types) + } + + pub fn stmt_def(&mut self, s: &StmtDef) -> StmtDef { + self.scope(|ctx| { + match &s.body { + Body::Expr(e) => { + let mut sub = vec![]; + let mut goals = vec![]; + for p in &s.params { + ctx.bind(p.name.clone(), Binding::Var(p.span, p.ty.clone())); + } + let e1 = ctx.expr(e, &mut sub, &mut goals); + ctx.recover(s.span, e1.span(), unify(&mut sub, &s.ty, e1.ty())); + let impls = ctx.impls(); + for goal in goals { + // TODO: Try to solve each goal multiple times + if solve(&goal, &impls, &s.where_clause, &mut sub, ctx).is_none() { + // ctx.report + // .err(goal.span, "Unsolved goal", "Could not solve goal"); + } + } + StmtDef::new( + s.span, + s.name.clone(), + s.generics.clone(), + s.where_clause.clone(), + s.params.clone(), + s.ty.clone(), + Body::Expr(e1), + ) + .map_type(&|t| t.apply(&sub)) + } + Body::Builtin => StmtDef::new( + s.span, + s.name.clone(), + s.generics.clone(), + s.where_clause.clone(), + s.params.clone(), + s.ty.clone(), + Body::Builtin, + ), + } + }) + } + + pub fn expr(&mut self, e: &Expr, sub: &mut Vec<(Name, Type)>, goals: &mut Vec) -> Expr { + let s = e.span(); + match e { + Expr::Unresolved(..) => unreachable!(), + Expr::Int(_, t0, v) => { + let t1 = ty("i32"); + let v = v.clone(); + self.recover(s, s, unify(sub, t0, &t1)); + Expr::Int(s, t0.apply(sub), v) + } + Expr::Float(_, t0, v) => { + let t1 = ty("f32"); + let v = v.clone(); + self.recover(s, s, unify(sub, t0, &t1)); + Expr::Float(s, t0.apply(sub), v) + } + Expr::Bool(_, t0, v) => { + let t1 = ty("bool"); + let v = *v; + self.recover(s, s, unify(sub, t0, &t1)); + Expr::Bool(s, t0.apply(sub), v) + } + Expr::String(_, t0, v) => { + let t1 = ty("String"); + let v = v.clone(); + self.recover(s, s, unify(sub, t0, &t1)); + Expr::String(s, t0.apply(sub), v) + } + Expr::Struct(_, t0, x, ts, xes) => { + let Binding::Struct(s1, gs, xts) = self.get(x).unwrap().clone() else { + unreachable!() + }; + let gsub = gs.into_iter().zip(ts.clone()).collect::>(); + for (x, e) in xes { + let t2 = xts + .iter() + .find_map(|(x0, t)| (x0 == x).then_some(t)) + .unwrap() + .instantiate(&gsub); + let e = self.expr(e, sub, goals); + self.recover(e.span(), s1, unify(sub, e.ty(), &t2)); + } + let t1 = Type::Cons(x.clone(), ts.clone()); + self.recover(s, s1, unify(sub, t0, &t1)); + Expr::Struct(s, t0.apply(sub), x.clone(), ts.clone(), xes.clone()) + } + Expr::Enum(_, t0, x, ts, x1, e) => { + let Binding::Enum(s1, gs, xts) = self.get(x).unwrap().clone() else { + unreachable!() + }; + let gsub = gs.into_iter().zip(ts.clone()).collect::>(); + let t2 = xts + .iter() + .find_map(|(x0, t)| (x0 == x1).then_some(t)) + .unwrap() + .instantiate(&gsub); + let e = self.expr(e, sub, goals); + self.recover(e.span(), s1, unify(sub, e.ty(), &t2)); + let t1 = Type::Cons(x.clone(), ts.clone()); + self.recover(s, s1, unify(sub, t0, &t1)); + Expr::Enum( + s, + t0.apply(sub), + x.clone(), + ts.clone(), + x1.clone(), + e.into(), + ) + } + Expr::Tuple(_, t0, es) => { + let es = es + .iter() + .map(|e| self.expr(e, sub, goals)) + .collect::>(); + let ts = es.iter().map(|e| e.ty().clone()).collect::>(); + let t1 = Type::Tuple(ts); + self.recover(s, s, unify(sub, t0, &t1)); + Expr::Tuple(s, t0.apply(sub), es) + } + Expr::Var(_, t0, x) => { + let Binding::Var(s1, t1) = self.get(x).unwrap().clone() else { + unreachable!() + }; + self.recover(s, s1, unify(sub, t0, &t1)); + Expr::Var(s, t0.apply(sub), x.clone()) + } + Expr::Def(_, t0, x, ts0) => { + let Binding::Def(s1, gs, preds, ts, t1) = self.get(x).unwrap().clone() else { + unreachable!() + }; + let gsub = gs.into_iter().zip(ts0.clone()).collect::>(); + let ts = ts.iter().map(|t| t.instantiate(&gsub)).collect::>(); + let t1 = t1.instantiate(&gsub); + let preds = preds + .iter() + .map(|p| p.map_type(&|t| t.instantiate(&gsub))) + .collect::>(); + goals.extend(preds); + let t2 = Type::Fun(ts, Rc::new(t1)); + self.recover(s, s1, unify(sub, t0, &t2)); + Expr::Def(s, t0.apply(sub), x.clone(), ts0.clone()) + } + Expr::Call(_, t0, e, es) => { + let e = self.expr(e, sub, goals); + let es = es + .iter() + .map(|e| self.expr(e, sub, goals)) + .collect::>(); + let ts = es.iter().map(|e| e.ty().clone()).collect::>(); + let t2 = Type::Fun(ts, Rc::new(t0.clone())); + self.recover(s, e.span(), unify(sub, e.ty(), &t2)); + Expr::Call(s, t0.apply(sub), Rc::new(e), es) + } + Expr::Block(_, t0, ss, e) => { + let ss = ss.iter().map(|s| self.stmt(s, sub, goals)).collect(); + let e = self.expr(e, sub, goals); + self.recover(s, e.span(), unify(sub, t0, e.ty())); + Expr::Block(s, t0.apply(sub), ss, e.into()) + } + Expr::Query(..) => todo!(), + Expr::Field(_, t0, e, x) => { + let e = self.expr(e, sub, goals); + let t = e.ty().apply(sub); + let Type::Cons(x0, ts) = t else { + self.report.err( + s, + "Unknown type", + format!("Type {t} must be known at this point."), + ); + return Expr::Err(s, t.clone()); + }; + let Binding::Struct(_, xs, xts) = self.get(&x0).unwrap().clone() else { + unreachable!() + }; + let gsub = xs.into_iter().zip(ts.clone()).collect::>(); + let t1 = xts + .iter() + .find_map(|(x1, t)| (x1 == x).then_some(t)) + .unwrap() + .instantiate(&gsub); + self.recover(s, e.span(), unify(sub, t0, &t1)); + Expr::Field(s, t0.apply(sub), e.into(), x.clone()) + } + Expr::Index(_, t0, e, i) => { + let e = self.expr(e, sub, goals); + let t = e.ty().apply(sub); + let Type::Tuple(ts) = &t else { + self.report.err( + s, + "Unknown type", + format!("Type {t} must be known at this point."), + ); + return Expr::Err(s, t.clone()); + }; + let Some(t1) = ts.get(i.data) else { + self.report.err( + s, + format!("Index {i} out of bounds ({i} >= {})", ts.len()), + format!("Index {i} out of bounds."), + ); + return Expr::Err(s, t.clone()); + }; + self.recover(s, e.span(), unify(sub, t0, t1)); + Expr::Index(s, t0.apply(sub), e.into(), *i) + } + Expr::Assoc(_, t0, x0, ts0, x1, ts1) => { + let Binding::Trait(stmt) = self.get(x0).unwrap().clone() else { + unreachable!() + }; + let d = stmt.defs.iter().find(|d| &d.name == x1).unwrap(); + let gs0 = stmt.generics.clone(); + let gs1 = d.generics.clone(); + let gsub0 = gs0 + .into_iter() + .chain(gs1) + .zip(ts0.clone().into_iter().chain(ts1.clone())) + .collect::>(); + let param_ts = d.params.iter().map(|p| p.ty.clone()).collect::>(); + let return_t = d.ty.clone(); + let fun_t = Type::Fun(param_ts, Rc::new(return_t)).instantiate(&gsub0); + self.recover(s, s, unify(sub, t0, &fun_t)); + let ts0 = ts0.iter().map(|t| t.apply(sub)).collect::>(); + let ts1 = ts1.iter().map(|t| t.apply(sub)).collect::>(); + goals.push(Bound::Trait(x0.span, x0.clone(), ts0.clone())); + Expr::Assoc(s, t0.apply(sub), x0.clone(), ts0, x1.clone(), ts1) + } + Expr::Array(_, t0, es) => { + let es = es + .iter() + .map(|e| self.expr(e, sub, goals)) + .collect::>(); + let t1 = es + .first() + .map(|e| e.ty().clone()) + .unwrap_or_else(|| self.new_tyvar()); + for e in es.iter() { + self.recover(s, e.span(), unify(sub, e.ty(), &t1)); + } + let t2 = Type::Cons(Name::from("Array"), vec![t1]); + self.recover(s, s, unify(sub, t0, &t2)); + Expr::Array(s, t0.apply(sub), es) + } + Expr::Err(s, t) => Expr::Err(*s, t.clone()), + Expr::Assign(_, t0, e0, e1) => { + let e0 = self.expr(e0, sub, goals); + let e1 = self.expr(e1, sub, goals); + self.recover(s, e0.span(), unify(sub, e0.ty(), e1.ty())); + self.recover(s, e0.span(), unify(sub, t0, &ty_unit())); + Expr::Assign(s, t0.apply(sub), Rc::new(e0), Rc::new(e1)) + } + Expr::Return(_, _, _) => unreachable!(), + Expr::Continue(_, _) => unreachable!(), + Expr::Break(_, _) => unreachable!(), + Expr::Fun(_, _, _, _, _) => todo!(), + Expr::Match(_, _, _, _) => todo!(), + Expr::While(_, _, _, _) => todo!(), + Expr::Record(_, _, _) => todo!(), + Expr::Value(_, _) => todo!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + } +} + +pub fn solve( + goal: &Bound, + impls: &[StmtImpl], + where_clause: &[Bound], + sub0: &mut Vec<(Name, Type)>, + ctx: &mut Context, +) -> Option { + let mut solutions = vec![]; + for tr in where_clause { + let mut sub1 = sub0.clone(); + if matches(&mut sub1, goal, tr) { + *sub0 = sub1; + solutions.push(Candidate::Bound(tr.clone())); + } + } + for i in impls { + let i = instantiate_impl(i, ctx); + let mut sub1 = sub0.clone(); + if matches(&mut sub1, goal, &i.head) + && i.where_clause + .iter() + .all(|subgoal| solve(subgoal, impls, where_clause, &mut sub1, ctx).is_some()) + { + *sub0 = sub1; + solutions.push(Candidate::Impl(i)); + } + } + // TODO: Return the current solutions + match solutions.len() { + 0 => None, + 1 => Some(solutions.pop().unwrap()), + _ => None, + } +} + +// Checks if i0 and i1 match, and if so, returns a substitution. +fn matches(s: &mut Vec<(Name, Type)>, b0: &Bound, b1: &Bound) -> bool { + match (b0, b1) { + (Bound::Trait(_, x0, ts0), Bound::Trait(_, x1, ts1)) => { + x0 == x1 + && ts0.len() == ts1.len() + && ts1 + .iter() + .zip(ts0.iter()) + .all(|(t0, t1)| unify(s, t0, t1).is_ok()) + } + (Bound::Unresolved(..), _) | (_, Bound::Unresolved(..)) => unreachable!(), + (Bound::Err(..), _) | (_, Bound::Err(..)) => true, + } + // && i1 + // .assocs + // .iter() + // .zip(i0.assocs.iter()) + // .all(|((_, t0), (_, t1))| unify(s, &t0, &t1).is_ok()) +} + +#[track_caller] +pub fn unify(s0: &mut Vec<(Name, Type)>, t0: &Type, t1: &Type) -> Result<(), (Type, Type)> { + let t0 = t0.apply(s0); + let t1 = t1.apply(s0); + let Some(s1) = mgu(&t0, &t1) else { + return Err((t0, t1)); + }; + *s0 = compose(s0.clone(), s1); + Ok(()) +} + +fn compose(s0: Vec<(Name, Type)>, s1: Vec<(Name, Type)>) -> Vec<(Name, Type)> { + s1.into_iter() + .map(|(x, t)| (x, t.apply(&s0))) + .chain(s0.clone()) + .collect() +} + +fn mgu_fold<'a>( + ts0: impl IntoIterator, + ts1: impl IntoIterator, +) -> Option> { + ts0.into_iter().zip(ts1).try_fold(vec![], |s0, (t0, t1)| { + let t0 = t0.apply(&s0); + let t1 = t1.apply(&s0); + let s1 = mgu(&t0, &t1)?; + Some(compose(s1, s0)) + }) +} + +fn mgu(t0: &Type, t1: &Type) -> Option> { + match (t0, t1) { + (Type::Cons(x0, ts0), Type::Cons(x1, ts1)) => { + (x0 == x1 && ts0.len() == ts1.len()).then(|| mgu_fold(ts0, ts1))? + } + (Type::Var(x), t) | (t, Type::Var(x)) => (t0 != t1) + .then(|| vec![(x.clone(), t.clone())]) + .or_else(|| Some(vec![])), + (Type::Fun(ts0, t0), Type::Fun(ts1, t1)) => (ts0.len() == ts1.len()).then(|| { + mgu_fold( + ts0.iter().chain([t0.as_ref()]), + ts1.iter().chain([t1.as_ref()]), + ) + })?, + (Type::Tuple(ts0), Type::Tuple(ts1)) => (ts0.len() == ts1.len()) + .then(|| mgu_fold(ts0.iter().chain(ts1), ts1.iter().chain(ts0)))?, + (Type::Err, _) | (_, Type::Err) => Some(vec![]), + (Type::Generic(x0), Type::Generic(x1)) => (x0 == x1).then(Vec::new), + (Type::Assoc(..), _) | (_, Type::Assoc(..)) => unreachable!(), + (Type::Hole, _) | (_, Type::Hole) => unreachable!(), + (Type::Unresolved(_), _) | (_, Type::Unresolved(_)) => unreachable!(), + _ => None, + } +} + +pub fn instantiate_impl(s: &StmtImpl, ctx: &mut Context) -> StmtImpl { + let sub = s + .generics + .iter() + .map(|q| (q.clone(), ctx.new_tyvar())) + .collect::>(); + + let head = s.head.map_type(&|t| t.instantiate(&sub)); + let body = s + .where_clause + .iter() + .map(|i| i.map_type(&|t| t.instantiate(&sub))) + .collect::>(); + let stmt_defs = s + .defs + .iter() + .map(|s| s.map_type(&|t| t.apply(&sub))) + .collect::>(); + let stmt_types = s + .types + .iter() + .map(|s| s.map_type(&|t| t.apply(&sub))) + .collect::>(); + + StmtImpl::new(s.span, vec![], head, body, stmt_defs, stmt_types) +} + +// pub fn instantiate_def(s: &StmtDef, ctx: &mut Context) -> StmtDef { +// let sub = s +// .generics +// .iter() +// .map(|q| (q.clone(), ctx.new_tyvar())) +// .collect::>(); +// +// let body = s +// .where_clause +// .iter() +// .map(|p| p.apply(&sub)) +// .collect::>(); +// let params = s.params.iter().map(|p| p.apply(&sub)).collect::>(); +// let ty = s.ty.apply(&sub); +// let expr = s.expr.apply(&sub); +// +// StmtDef::new(s.span, s.name.clone(), vec![], body, params, ty, expr) +// } diff --git a/crates/compiler/src/interpret.rs b/crates/compiler/src/interpret.rs new file mode 100644 index 0000000..73ed297 --- /dev/null +++ b/crates/compiler/src/interpret.rs @@ -0,0 +1,274 @@ +use crate::ast::Body; +use crate::ast::Expr; +use crate::ast::Name; +use crate::ast::Pat; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::Type; +use crate::builtins::Fun; +use crate::builtins::Record; +use crate::builtins::Tuple; +use crate::builtins::Value; +use crate::builtins::Variant; +use crate::diag::Report; + +#[derive(Debug, Default)] +pub struct Context { + stack: Stack, + pub report: Report, +} + +#[derive(Debug)] +struct Stack(Vec); + +impl Default for Stack { + fn default() -> Self { + Stack(vec![Scope::new()]) + } +} + +impl Stack { + fn new() -> Stack { + Self::default() + } + + fn bind(&mut self, name: Name, binding: Binding) { + self.0.last_mut().unwrap().0.push((name, binding)); + } + + fn get(&self, name: &Name) -> &Binding { + self.0 + .iter() + .rev() + .find_map(|scope| scope.0.iter().find(|(n, _)| n == name)) + .map(|(_, b)| b) + .unwrap() + } +} + +#[derive(Debug)] +struct Scope(Vec<(Name, Binding)>); + +impl Scope { + fn new() -> Scope { + Scope(Vec::new()) + } +} + +#[derive(Clone, Debug)] +enum Binding { + Var(Value), + Def(Vec, Body), + Struct(Vec<(Name, Type)>), + Enum(Vec<(Name, Type)>), + Impl(Vec<(Name, Type)>, Vec<(Name, Body)>), +} + +impl Context { + pub fn new() -> Context { + Context { + stack: Stack::new(), + report: Report::new(), + } + } + + fn scoped(&mut self, f: impl FnOnce(&mut Self) -> Value) -> Value { + self.stack.0.push(Scope::new()); + let v = f(self); + self.stack.0.pop(); + v + } + + pub fn interpret(&mut self, p: &Program) { + p.stmts.iter().for_each(|stmt| self.stmt(stmt)); + } + + fn stmt(&mut self, s: &Stmt) { + match s { + Stmt::Var(s) => self.stmt_var(s), + Stmt::Def(s) => self.stmt_def(s), + Stmt::Trait(_) => {} + Stmt::Impl(s) => self.stmt_impl(s), + Stmt::Struct(s) => self.stmt_struct(s), + Stmt::Enum(s) => self.stmt_enum(s), + Stmt::Type(s) => self.stmt_type(s), + Stmt::Expr(s) => self.stmt_expr(s), + Stmt::Err(_) => todo!(), + } + } + + fn stmt_var(&mut self, s: &StmtVar) { + let value = self.expr(&s.expr); + self.stack.bind(s.name.clone(), Binding::Var(value)); + } + + fn stmt_def(&mut self, s: &StmtDef) { + let body = s.body.clone(); + let param_names = s.params.iter().map(|p| p.name.clone()).collect(); + self.stack + .bind(s.name.clone(), Binding::Def(param_names, body)); + } + + fn stmt_impl(&mut self, _: &StmtImpl) { + todo!() + } + + fn stmt_struct(&mut self, _: &StmtStruct) { + todo!() + } + + fn stmt_enum(&mut self, _: &StmtEnum) { + todo!() + } + + fn stmt_type(&mut self, _: &StmtType) { + todo!() + } + + fn stmt_expr(&mut self, _: &Expr) { + todo!() + } + + fn expr(&mut self, e: &Expr) -> Value { + match e { + Expr::Unresolved(_, _, _) => unreachable!(), + Expr::Int(_, t, v) => { + let Type::Cons(x, _) = t else { + unreachable!(); + }; + match x.data.as_str() { + "i8" => Value::I8(v.parse().unwrap()), + "i16" => Value::I16(v.parse().unwrap()), + "i32" => Value::I32(v.parse().unwrap()), + "i64" => Value::I64(v.parse().unwrap()), + "u8" => Value::U8(v.parse().unwrap()), + "u16" => Value::U16(v.parse().unwrap()), + "u32" => Value::U32(v.parse().unwrap()), + "u64" => Value::U64(v.parse().unwrap()), + _ => unreachable!(), + } + } + Expr::Float(_, t, v) => { + let Type::Cons(x, _) = t else { + unreachable!(); + }; + match x.data.as_str() { + "f32" => Value::F32(v.parse().unwrap()), + "f64" => Value::F64(v.parse().unwrap()), + _ => unreachable!(), + } + } + Expr::Bool(_, _, b) => Value::Bool(*b), + Expr::String(_, _, v) => Value::from(runtime::prelude::String::from(v.as_str())), + Expr::Struct(_, _, _, _, xes) => { + let xvs = xes.iter().map(|(n, e)| (n.clone(), self.expr(e))).collect(); + Value::from(Record::new(xvs)) + } + Expr::Tuple(_, _, es) => { + let vs = es.iter().map(|e| self.expr(e)).collect(); + Value::from(Tuple::new(vs)) + } + Expr::Record(_, _, xes) => { + let xvs = xes.iter().map(|(n, e)| (n.clone(), self.expr(e))).collect(); + Value::from(Record::new(xvs)) + } + Expr::Enum(_, _, _, _, x1, e) => { + let v = self.expr(e); + Value::from(Variant::new(x1.clone(), v)) + } + Expr::Field(_, _, e, x) => { + let Value::Record(xvs) = self.expr(e) else { + unreachable!(); + }; + xvs.0.iter().find(|(n, _)| n == x).unwrap().1.clone() + } + Expr::Index(_, _, e, i) => { + let Value::Tuple(vs) = self.expr(e) else { + unreachable!(); + }; + vs.0[i.data].clone() + } + Expr::Var(_, _, x) => { + let Binding::Var(v) = self.stack.get(x) else { + unreachable!(); + }; + v.clone() + } + Expr::Def(_, _, x, ts) => Value::from(Fun::new(x.clone(), ts.clone())), + Expr::Call(_, _, e, es) => { + let Value::Fun(f) = self.expr(e) else { + unreachable!(); + }; + let vs = es.iter().map(|e| self.expr(e)).collect::>(); + let Binding::Def(xs, body) = self.stack.get(&f.name).clone() else { + unreachable!(); + }; + match body { + Body::Expr(e) => self.scoped(|this| { + xs.iter() + .zip(vs) + .for_each(|(x, v)| this.stack.bind(x.clone(), Binding::Var(v))); + this.expr(&e) + }), + Body::Builtin => todo!(), + } + } + Expr::Block(_, _, ss, e) => self.scoped(|this| { + ss.iter().for_each(|s| this.stmt(s)); + this.expr(e) + }), + Expr::Query(_, _, _) => todo!(), + Expr::Assoc(_, _, _, _, _, _) => todo!(), + Expr::Match(_, _, e, pes) => { + let mut iter = pes.iter(); + let (Pat::Enum(_, _, _, _, x_then, p), e_then) = iter.next().unwrap() else { + unreachable!(); + }; + let Pat::Var(_, _, x_var) = p.as_ref() else { + unreachable!(); + }; + let (Pat::Wildcard(_, _), e_else) = iter.next().unwrap() else { + unreachable!() + }; + let Value::Variant(v) = self.expr(e) else { + unreachable!(); + }; + if *x_then == v.name { + let v = v.value.as_ref().clone(); + self.stack.bind(x_var.clone(), Binding::Var(v)); + self.expr(e_then) + } else { + self.expr(e_else) + } + } + Expr::Array(_, _, _) => todo!(), + Expr::Assign(_, _, _, _) => todo!(), + Expr::Return(_, _, _) => unreachable!(), + Expr::Continue(_, _) => unreachable!(), + Expr::Break(_, _) => unreachable!(), + Expr::While(_, _, e0, e1) => { + while { + let Value::Bool(v) = self.expr(e0) else { + unreachable!() + }; + v + } { + self.expr(e1); + } + Value::from(Tuple::new(vec![])) + } + Expr::Fun(_, _, _, _, _) => unreachable!(), + Expr::Err(_, _) => unreachable!(), + Expr::Value(_, _) => unreachable!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + } +} diff --git a/crates/compiler/src/lexer.rs b/crates/compiler/src/lexer.rs new file mode 100644 index 0000000..d3ddab2 --- /dev/null +++ b/crates/compiler/src/lexer.rs @@ -0,0 +1,584 @@ +use crate::diag::Report; + +#[bitmask_enum::bitmask(u128)] +#[bitmask_config(vec_debug)] +pub enum Token { + // Punctuations + Bar, + Colon, + ColonColon, + Comma, + Dot, + DotDot, + Eq, + EqEq, + FatArrow, + Ge, + Gt, + LBrace, + LBrack, + LParen, + Le, + Lt, + Minus, + Not, + NotEq, + Plus, + Question, + RBrace, + RBrack, + RParen, + SemiColon, + Slash, + Star, + Underscore, + // Keywords + And, + As, + Break, + Compute, + Continue, + Def, + Deploy, + Desc, + Else, + Enum, + False, + For, + From, + Fun, + Group, + If, + Impl, + In, + Into, + Join, + Match, + Of, + On, + Or, + Order, + Over, + Return, + Select, + Struct, + Trait, + True, + Type, + Var, + Where, + While, + With, + // Literals + Char, + Code, + Float, + FloatSuffix, + Int, + IntSuffix, + Name, + String, + // Special + Eof, + Err, +} + +impl std::fmt::Display for Token { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match *self { + Token::Eq => write!(f, "="), + Token::EqEq => write!(f, "=="), + Token::Not => write!(f, "!"), + Token::NotEq => write!(f, "!="), + Token::Lt => write!(f, "<"), + Token::Le => write!(f, "<="), + Token::Gt => write!(f, ">"), + Token::Ge => write!(f, ">="), + Token::Plus => write!(f, "+"), + Token::Minus => write!(f, "-"), + Token::Star => write!(f, "*"), + Token::Slash => write!(f, "/"), + Token::Dot => write!(f, "."), + Token::DotDot => write!(f, ".."), + Token::Colon => write!(f, ":"), + Token::ColonColon => write!(f, "::"), + Token::SemiColon => write!(f, ";"), + Token::Comma => write!(f, ","), + Token::LParen => write!(f, "("), + Token::RParen => write!(f, ")"), + Token::LBrace => write!(f, "{{"), + Token::RBrace => write!(f, "}}"), + Token::LBrack => write!(f, "["), + Token::RBrack => write!(f, "]"), + Token::Underscore => write!(f, "_"), + Token::Question => write!(f, "?"), + Token::FatArrow => write!(f, "=>"), + Token::Bar => write!(f, "|"), + // Keywords + Token::And => write!(f, "and"), + Token::Break => write!(f, "break"), + Token::Continue => write!(f, "continue"), + Token::Def => write!(f, "def"), + Token::Deploy => write!(f, "deploy"), + Token::Desc => write!(f, "desc"), + Token::Else => write!(f, "else"), + Token::Enum => write!(f, "enum"), + Token::False => write!(f, "false"), + Token::For => write!(f, "for"), + Token::From => write!(f, "from"), + Token::Fun => write!(f, "fun"), + Token::Group => write!(f, "group"), + Token::If => write!(f, "if"), + Token::Impl => write!(f, "impl"), + Token::In => write!(f, "in"), + Token::Into => write!(f, "into"), + Token::Join => write!(f, "join"), + Token::Match => write!(f, "match"), + Token::On => write!(f, "on"), + Token::Or => write!(f, "or"), + Token::Order => write!(f, "order"), + Token::Over => write!(f, "over"), + Token::Return => write!(f, "return"), + Token::Select => write!(f, "select"), + Token::Struct => write!(f, "struct"), + Token::True => write!(f, "true"), + Token::Type => write!(f, "type"), + Token::Var => write!(f, "var"), + Token::Where => write!(f, "where"), + Token::While => write!(f, "while"), + Token::With => write!(f, "with"), + // Literals + Token::Code => write!(f, ""), + Token::Name => write!(f, ""), + Token::Int => write!(f, ""), + Token::IntSuffix => write!(f, ""), + Token::Float => write!(f, ""), + Token::FloatSuffix => write!(f, ""), + Token::String => write!(f, ""), + Token::Char => write!(f, ""), + Token::Err => write!(f, ""), + Token::Eof => write!(f, ""), + Token::Of => write!(f, "of"), + Token::As => write!(f, "as"), + Token::Compute => write!(f, "compute"), + Token::Trait => write!(f, "trait"), + _ => write!(f, ""), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Spanned { + pub span: Span, + pub value: T, +} + +impl Spanned { + pub fn new(span: Span, value: T) -> Spanned { + Spanned { span, value } + } + + pub fn map U>(self, f: F) -> Spanned { + Spanned { + span: self.span, + value: f(self.value), + } + } +} + +impl Spanned>> { + pub fn flatten(self) -> Spanned> { + self.map(|v| v.unwrap_or_default()) + } +} + +impl Spanned> { + pub fn transpose(self) -> Option> { + match self.value { + Some(value) => Some(Spanned { + span: self.span, + value, + }), + None => None, + } + } +} + +impl Spanned { + pub fn text(self, input: &str) -> &str { + let span = self.span; + match self.value { + Token::Code => &input[(span.start() + 3) as usize..(span.end() - 3) as usize], + Token::String => &input[(span.start() + 1) as usize..(span.end() - 1) as usize], + Token::Char => &input[(span.start() + 1) as usize..(span.end() - 1) as usize], + _ => &input[*span.start() as usize..*span.end() as usize], + } + } +} + +#[derive(Clone, Copy, Default)] +pub enum Span { + Source(u16, u32, u32), + #[default] + Generated, +} + +impl Eq for Span {} +impl PartialEq for Span { + fn eq(&self, _: &Self) -> bool { + true + } +} +impl std::hash::Hash for Span { + fn hash(&self, _: &mut H) {} +} + +impl std::fmt::Debug for Span { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Span::Source(file, start, end) => write!(f, "{file}:{start}..{end}"), + Span::Generated => write!(f, "..."), + } + } +} + +impl std::fmt::Display for Span { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Span::Source(file, start, end) => write!(f, "{:?}:{}-{}", file, start, end), + Span::Generated => write!(f, ""), + } + } +} + +impl Span { + pub fn new(file: u16, range: std::ops::Range) -> Span { + Span::Source(file, range.start, range.end) + } + + pub fn file(&self) -> &u16 { + match self { + Span::Source(file, _, _) => file, + Span::Generated => &0, + } + } + + pub fn start(&self) -> &u32 { + match self { + Span::Source(_, start, _) => start, + Span::Generated => &0, + } + } + + pub fn end(&self) -> &u32 { + match self { + Span::Source(_, _, end) => end, + Span::Generated => &0, + } + } +} + +impl std::ops::Add for Span { + type Output = Span; + + fn add(self, other: Span) -> Self::Output { + match (self, other) { + (Span::Generated, Span::Generated) => Span::Generated, + (Span::Generated, Span::Source(file, start, end)) => Span::new(file, start..end), + (Span::Source(file, start, end), Span::Generated) => Span::new(file, start..end), + (Span::Source(file, start, _), Span::Source(_, _, end)) => Span::new(file, start..end), + } + } +} + +pub struct Lexer<'a> { + input: &'a str, + pos: usize, + eof: bool, + pub file: u16, + pub report: Report, +} + +impl<'a> Lexer<'a> { + pub fn new(file: u16, input: &'a str) -> Lexer<'a> { + Lexer { + file, + input, + eof: false, + pos: 0, + report: Report::new(), + } + } + + fn unexpected_char(&mut self, c: char) { + self.report.err( + Span::new(self.file, (self.pos - 1) as u32..self.pos as u32), + "Unexpected character", + format!("Unexpected character '{c}'"), + ); + } + + pub fn text(&self, t: Spanned) -> &'a str { + t.text(self.input) + } + + pub fn lex(&mut self) -> Option> { + loop { + let start = self.pos; + let mut chars = self.input[self.pos..].chars(); + let c = chars.next()?; + self.pos += c.len_utf8(); + + let token = match c { + '#' => { + for c in chars.by_ref() { + if c == '\n' { + break; + } + self.pos += c.len_utf8(); + } + continue; + } + ' ' | '\n' | '\t' => continue, + 'a'..='z' | 'A'..='Z' | '_' => { + while let Some('a'..='z' | 'A'..='Z' | '0'..='9' | '_') = chars.next() { + self.pos += 1; + } + if self.pos - start == 1 && c == '_' { + Token::Underscore + } else { + match &self.input[start..self.pos] { + "and" => Token::And, + "as" => Token::As, + "break" => Token::Break, + "compute" => Token::Compute, + "continue" => Token::Continue, + "def" => Token::Def, + "deploy" => Token::Deploy, + "else" => Token::Else, + "enum" => Token::Enum, + "false" => Token::False, + "for" => Token::For, + "from" => Token::From, + "fun" => Token::Fun, + "group" => Token::Group, + "if" => Token::If, + "impl" => Token::Impl, + "in" => Token::In, + "into" => Token::Into, + "join" => Token::Join, + "match" => Token::Match, + "of" => Token::Of, + "on" => Token::On, + "or" => Token::Or, + "order" => Token::Order, + "over" => Token::Over, + "return" => Token::Return, + "select" => Token::Select, + "struct" => Token::Struct, + "trait" => Token::Trait, + "true" => Token::True, + "type" => Token::Type, + "var" => Token::Var, + "where" => Token::Where, + "while" => Token::While, + "with" => Token::With, + _ => Token::Name, + } + } + } + '0'..='9' => loop { + match chars.next() { + Some('0'..='9') => self.pos += 1, + Some('.') => match chars.next() { + Some('a'..='z' | 'A'..='Z' | '_') => { + break Token::Int; + } + Some('0'..='9') => { + self.pos += 1; + self.pos += 1; + let mut c = chars.next(); + while let Some('0'..='9') = c { + self.pos += 1; + c = chars.next(); + } + if let Some('a'..='z' | 'A'..='Z' | '_') = c { + self.pos += 1; + while let Some('a'..='z' | 'A'..='Z' | '0'..='9' | '_') = + chars.next() + { + self.pos += 1; + } + break Token::FloatSuffix; + } else { + break Token::Float; + } + } + _ => { + self.pos += 1; + break Token::Float; + } + }, + Some(c) => { + if let 'a'..='z' | 'A'..='Z' | '_' = c { + self.pos += 1; + while let Some('a'..='z' | 'A'..='Z' | '0'..='9' | '_') = + chars.next() + { + self.pos += 1; + } + break Token::IntSuffix; + } else { + break Token::Int; + } + } + None => { + break Token::Int; + } + } + }, + '"' => loop { + let c = chars.next()?; + self.pos += c.len_utf8(); + match c { + '\\' => { + let c = chars.next()?; + self.pos += c.len_utf8(); + } + '"' => { + break Token::String; + } + _ => {} + } + }, + '\'' => { + let c = chars.next()?; + self.pos += c.len_utf8(); + if c == '\\' { + let c = chars.next()?; + self.pos += c.len_utf8(); + } + let c = chars.next()?; + self.pos += c.len_utf8(); + if c == '\'' { + Token::Char + } else { + self.unexpected_char(c); + continue; + } + } + '(' => Token::LParen, + ')' => Token::RParen, + '{' => Token::LBrace, + '}' => Token::RBrace, + '[' => Token::LBrack, + ']' => Token::RBrack, + '=' => match chars.next() { + Some('=') => { + self.pos += '='.len_utf8(); + Token::EqEq + } + Some('>') => { + self.pos += '>'.len_utf8(); + Token::FatArrow + } + _ => Token::Eq, + }, + ':' => { + if let Some(':') = chars.next() { + self.pos += ':'.len_utf8(); + Token::ColonColon + } else { + Token::Colon + } + } + '!' => { + if let Some('=') = chars.next() { + self.pos += '='.len_utf8(); + Token::NotEq + } else { + Token::Not + } + } + '<' => { + if let Some('=') = chars.next() { + self.pos += '='.len_utf8(); + Token::Le + } else { + Token::Lt + } + } + '>' => { + if let Some('=') = chars.next() { + self.pos += '='.len_utf8(); + Token::Ge + } else { + Token::Gt + } + } + '.' => { + if let Some('.') = chars.next() { + self.pos += '.'.len_utf8(); + Token::DotDot + } else { + Token::Dot + } + } + ';' => Token::SemiColon, + ',' => Token::Comma, + '+' => Token::Plus, + '|' => Token::Bar, + '-' => { + if let (Some('-'), Some('-')) = (chars.next(), chars.next()) { + self.pos += '-'.len_utf8() * 2; + loop { + let c = chars.next()?; + self.pos += c.len_utf8(); + if c == '-' { + let c = chars.next()?; + self.pos += c.len_utf8(); + if c == '-' { + let c = chars.next()?; + self.pos += c.len_utf8(); + if c == '-' { + break; + } + } + } + } + Token::Code + } else { + Token::Minus + } + } + '*' => Token::Star, + '/' => Token::Slash, + '?' => Token::Question, + t => { + self.unexpected_char(t); + Token::Err + } + }; + return Some(Spanned::new( + Span::new(self.file, start as u32..self.pos as u32), + token, + )); + } + } +} + +impl<'a> Iterator for Lexer<'a> { + type Item = Spanned; + + fn next(&mut self) -> Option { + self.lex().or_else(|| { + if self.eof { + None + } else { + self.eof = true; + let span = Span::new(self.file, self.pos as u32..self.pos as u32); + Some(Spanned::new(span, Token::Eof)) + } + }) + } +} diff --git a/crates/compiler/src/lib.rs b/crates/compiler/src/lib.rs new file mode 100644 index 0000000..3708e38 --- /dev/null +++ b/crates/compiler/src/lib.rs @@ -0,0 +1,258 @@ +#![allow(dead_code)] + +use std::rc::Rc; + +use config::Config; + +use ast::Bound; +use ast::Expr; +use ast::Pat; +use ast::Program; +use ast::Stmt; +use ast::StmtImpl; +use ast::Type; +use diag::Report; +use diag::Sources; +use lexer::Lexer; +use parser::Parser; +use util::trim; + +pub mod annotate; +pub mod apply; +pub mod ast; +pub mod builtins; +pub mod codegen; +pub mod diag; +pub mod display; +pub mod ffi; +pub mod helper; +pub mod infer; +pub mod interpret; +pub mod lexer; +pub mod lift; +pub mod parser; +pub mod prelude; +pub mod print; +pub mod resolve; +pub mod util; +pub mod parser2; +pub mod opt; + +#[derive(Default, Debug)] +pub struct Compiler { + ctx0: resolve::Context, + ctx1: infer::Context, + ctx2: interpret::Context, + pub sources: Sources, + report: Report, + pub config: Config, +} + +impl Drop for Compiler { + fn drop(&mut self) { + if !self.report.is_empty() { + self.report.print(&mut self.sources).unwrap(); + } + } +} + +impl Compiler { + pub fn new(config: Config) -> Self { + Self { + ctx0: resolve::Context::new(), + ctx1: infer::Context::new(), + ctx2: interpret::Context::new(), + sources: Sources::new(), + report: Report::new(), + config, + } + } + + pub fn parse( + &mut self, + name: impl ToString, + input: impl Into>, + f: impl for<'a> Fn(&mut Parser<'a, &mut Lexer<'a>>) -> T, + ) -> Result { + let input = input.into(); + let id = self.sources.add(name, input.clone()); + let mut lexer = Lexer::new(id, input.as_ref()); + let mut parser = Parser::new(&input, &mut lexer); + let result = f(&mut parser); + self.report.merge(&mut parser.report); + self.report.merge(&mut lexer.report); + if self.report.is_empty() { + Ok(result) + } else { + Err((result, self.report())) + } + } + + pub fn resolve(&mut self, name: &str, input: &str) -> Result { + let program = match self.parse(name, input, |parser| parser.parse()) { + Ok(program) => program, + Err((program, e)) => return Err((program, e)), + }; + let result = self.ctx0.resolve(&program); + self.report.merge(&mut self.ctx0.report); + if self.report.is_empty() { + Ok(result) + } else { + Err((result, self.report())) + } + } + + pub fn infer(&mut self, name: &str, input: &str) -> Result { + let program = match self.resolve(name, input) { + Ok(program) => program, + Err((program, e)) => return Err((program, e)), + }; + let program = self.ctx1.infer(&program); + self.report.merge(&mut self.ctx1.report); + if self.report.is_empty() { + Ok(program) + } else { + Err((program, self.report())) + } + } + + pub fn interpret(&mut self, name: &str, input: &str) -> Result { + let program = match self.infer(name, input) { + Ok(program) => program, + Err((program, e)) => return Err((program, e)), + }; + self.ctx2.interpret(&program); + self.report.merge(&mut self.ctx2.report); + self.ok_or_err(program) + } + + fn ok_or_err(&mut self, result: T) -> Result { + if self.report.is_empty() { + Ok(result) + } else { + Err((result, self.report())) + } + } + + pub fn report(&mut self) -> String { + trim(self.report.string(&mut self.sources).unwrap()) + } +} + +impl Expr { + pub fn parse(input: &str) -> Expr { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.expr()) + .map(|e| e.unwrap()) + } +} + +impl Type { + pub fn parse(input: &str) -> Type { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.ty()) + .map(|t| t.unwrap()) + } +} + +impl Stmt { + pub fn parse(input: &str) -> Stmt { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.stmt()) + .map(|s| s.unwrap()) + } +} + +impl Pat { + pub fn parse(input: &str) -> Pat { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.pat()) + .map(|p| p.unwrap()) + } +} + +impl Bound { + pub fn parse(input: &str) -> Bound { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.bound()) + .map(|t| t.unwrap()) + } +} + +impl StmtImpl { + pub fn parse(input: &str) -> StmtImpl { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result, String)> { + Compiler::default() + .parse("test", input, |parser| parser.stmt_impl()) + .map(|i| i.unwrap()) + } +} + +impl Program { + pub fn parse(input: &str) -> Program { + Self::try_parse(input).unwrap_or_else(|(_, s)| panic!("{}", s)) + } + + pub fn diagnose(s: &str) -> String { + Self::try_parse(s).unwrap_err().1 + } + + pub fn try_parse(input: &str) -> Result { + Compiler::default().parse("test", input, |parser| parser.parse()) + } + + pub fn try_resolve(input: &str) -> Result { + Compiler::default().resolve("test", input) + } + + pub fn try_infer(input: &str) -> Result { + Compiler::default().infer("test", input) + } +} diff --git a/crates/compiler/src/lift.rs b/crates/compiler/src/lift.rs new file mode 100644 index 0000000..9ffa24a --- /dev/null +++ b/crates/compiler/src/lift.rs @@ -0,0 +1,87 @@ +use crate::ast::Expr; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; + +struct Lift {} + +struct Stack(Vec); + +impl Stack { + fn new() -> Stack { + Stack(vec![Scope::new()]) + } +} + +struct Scope(Vec); + +impl Scope { + fn new() -> Scope { + Scope(vec![]) + } +} + +enum Binding {} + +impl Lift { + fn new() -> Lift { + Lift {} + } + + fn lift(&mut self, program: &Program) -> Program { + let stmts = program.stmts.iter().map(|stmt| self.stmt(stmt)).collect(); + Program::new(stmts) + } + + fn stmt(&mut self, stmt: &Stmt) -> Stmt { + match stmt { + Stmt::Var(s) => self.stmt_var(s), + Stmt::Def(s) => self.stmt_def(s), + Stmt::Trait(s) => self.stmt_trait(s), + Stmt::Impl(s) => self.stmt_impl(s), + Stmt::Struct(s) => self.stmt_struct(s), + Stmt::Enum(s) => self.stmt_enum(s), + Stmt::Type(s) => self.stmt_type(s), + Stmt::Expr(s) => self.stmt_expr(s), + Stmt::Err(_) => todo!(), + } + } + + fn stmt_var(&mut self, _: &StmtVar) -> Stmt { + todo!() + } + + fn stmt_def(&mut self, _: &StmtDef) -> Stmt { + todo!() + } + + fn stmt_trait(&self, _: &StmtTrait) -> Stmt { + todo!() + } + + fn stmt_impl(&self, _: &StmtImpl) -> Stmt { + todo!() + } + + fn stmt_struct(&self, _: &StmtStruct) -> Stmt { + todo!() + } + + fn stmt_enum(&self, _: &StmtEnum) -> Stmt { + todo!() + } + + fn stmt_type(&self, _: &StmtType) -> Stmt { + todo!() + } + + fn stmt_expr(&self, _: &Expr) -> Stmt { + todo!() + } +} diff --git a/crates/compiler/src/opt.rs b/crates/compiler/src/opt.rs new file mode 100644 index 0000000..5198409 --- /dev/null +++ b/crates/compiler/src/opt.rs @@ -0,0 +1,9 @@ +use egg::*; + +//use crate::ast::Program; + +pub enum Ir { + Add([Id; 2]), +} + +// impl FromOp for Program {} diff --git a/crates/compiler/src/parser.rs b/crates/compiler/src/parser.rs new file mode 100644 index 0000000..976a434 --- /dev/null +++ b/crates/compiler/src/parser.rs @@ -0,0 +1,1485 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Index; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::PatArg; +use crate::ast::Program; +use crate::ast::Query; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::TraitType; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::diag::Report; +use crate::lexer::Span; +use crate::lexer::Spanned; +use crate::lexer::Token; +use crate::util::expr_and; +use crate::util::expr_block; +use crate::util::expr_bool; +use crate::util::expr_break; +use crate::util::expr_call; +use crate::util::expr_match; +use crate::util::expr_or; +use crate::util::expr_var; +use crate::util::expr_while; +use crate::util::parsed_expr_assoc; +use crate::util::parsed_expr_def; +use crate::util::parsed_expr_enum; +use crate::util::parsed_expr_var; +use crate::util::parsed_pat_enum; +use crate::util::parsed_pat_var; +use crate::util::pat_wild; +use crate::util::stmt_var; +use crate::util::ty_hole; + +pub struct Parser<'a, I> +where + I: Iterator>, +{ + input: &'a str, + lexer: std::iter::Peekable, + pub report: Report, +} + +enum Either { + A(A), + B(B), +} + +impl<'a, I> Parser<'a, I> +where + I: Iterator>, +{ + pub fn new(input: &'a str, lexer: I) -> Self { + let lexer = lexer.peekable(); + let report = Report::new(); + Self { + input, + lexer, + report, + } + } + + fn peek(&mut self) -> Token { + self.lexer.peek().map(|x| x.value).unwrap_or(Token::Eof) + } + + fn next(&mut self) -> Option> { + self.lexer.next() + } + + fn text(&self, t: Spanned) -> &'a str { + t.text(self.input) + } + + #[inline(always)] + fn or_else( + &mut self, + f: impl Fn(&mut Self) -> Option, + or: impl FnOnce(Span) -> T, + ) -> Option { + if let Some(x) = f(self) { + Some(x) + } else { + self.peek_span().map(or) + } + } + + fn optional(&mut self, token: Token) -> Option { + if self.peek() == token { + Some(self.advance()) + } else { + None + } + } + + fn optional_any(&mut self, tokens: [Token; N]) -> Option { + let t = self.peek(); + if tokens.into_iter().any(|t1| t == t1) { + Some(self.advance()) + } else { + None + } + } + + fn advance(&mut self) -> Span { + self.next().unwrap().span + } + + fn peek_span(&mut self) -> Option { + self.lexer.peek().map(|t| t.span) + } + + fn recover(&mut self, tokens: [Token; N]) -> Option> { + loop { + match self.peek() { + t if t == Token::Eof => return None, + t if tokens.contains(&t) => return self.next(), + Token::SemiColon | Token::RBrace | Token::RBrack | Token::RParen => { + return None; + } + _ => self.next(), + }; + } + } + + #[inline(always)] + fn recursive(&mut self, f: impl Fn(&mut Self) -> Option) -> Option { + let red_zone = 32 * 1024; + let stack_size = 1024 * 1024; + stacker::maybe_grow( + red_zone, + stack_size, + #[inline(always)] + || f(self), + ) + } + + fn expect_any(&mut self, tokens: [Token; N]) -> Option> { + match self.peek() { + t if tokens.contains(&t) => Some(self.next().unwrap()), + Token::Eof => { + let s = self.peek_span().unwrap(); + self.report.err( + s, + "Unexpected end of file", + format!( + "Expected {}", + tokens + .into_iter() + .map(|t| format!("`{}`", t)) + .collect::>() + .join(", ") + ), + ); + None + } + Token::RBrace | Token::RBrack | Token::RParen => None, + t => { + let label = format!("Unexpected token `{t}`"); + let msg = format!( + "Expected {}", + tokens + .into_iter() + .map(|t| format!("`{}`", t)) + .collect::>() + .join(", ") + ); + let s = self.advance(); + self.report.err(s, label, msg); + self.recover(tokens) + } + } + } + + fn expect(&mut self, token: Token) -> Option { + Some(self.expect_any([token])?.span) + } + + fn sep_until( + &mut self, + f: impl Fn(&mut Self) -> Option, + sep: Token, + r: Token, + ) -> Option> { + let mut xs = vec![]; + if self.peek() != r { + xs.push(f(self)?); + while self.optional(sep).is_some() { + if self.peek() == r { + println!("{r}"); + break; + } else { + xs.push(f(self)?); + } + } + } + Some(xs) + } + + // Can end with a trailing comma + fn sep_until_cond( + &mut self, + sep: Token, + f: impl Fn(&mut Self) -> Option, + c: impl Fn(&mut Self) -> bool, + ) -> Option> { + let mut xs = vec![]; + if !c(self) { + xs.push(f(self)?); + while self.optional(sep).is_some() { + if !c(self) { + xs.push(f(self)?); + } else { + break; + } + } + } + Some(xs) + } + + fn comma_sep_until_cond( + &mut self, + f: impl Fn(&mut Self) -> Option, + c: impl Fn(&mut Self) -> bool, + ) -> Option> { + let mut xs = vec![]; + if !c(self) { + xs.push(f(self)?); + while self.optional(Token::Comma).is_some() { + if !c(self) { + xs.push(f(self)?); + } else { + break; + } + } + } + Some(xs) + } + + fn sep( + &mut self, + f: impl Fn(&mut Self) -> Option, + sep: Token, + l: Token, + r: Token, + ) -> Option> { + self.expect(l)?; + let xs = self.sep_until(f, sep, r)?; + self.expect(r)?; + Some(xs) + } + + fn comma_sep( + &mut self, + f: impl Fn(&mut Self) -> Option, + l: Token, + r: Token, + ) -> Option> { + self.sep(f, Token::Comma, l, r) + } + + pub fn parse(&mut self) -> Program { + let mut stmts = Vec::new(); + loop { + if let Some(stmt) = self.stmt() { + stmts.push(stmt); + } + while self.optional(Token::SemiColon).is_some() {} + if self.peek() == Token::Eof { + break; + } + } + Program::new(stmts) + } + + fn name(&mut self) -> Option { + match self.peek() { + Token::Name => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + let name = Name::new(t.span, v); + Some(name) + } + _ => None, + } + } + + fn index(&mut self) -> Option { + match self.peek() { + Token::Int => { + let t = self.next().unwrap(); + let v = self.text(t); + match v.parse() { + Ok(v) => Some(Index::new(t.span, v)), + Err(e) => { + self.report + .err(t.span, format!("Invalid index `{}`", v), format!("{e}")); + None + } + } + } + _ => None, + } + } + + pub fn stmt(&mut self) -> Option { + let stmt = match self.peek() { + Token::Def => Stmt::Def(self.stmt_def()?), + Token::Impl => Stmt::Impl(self.stmt_impl()?), + Token::Var => Stmt::Var(self.stmt_var()?), + Token::Struct => Stmt::Struct(self.stmt_struct()?), + Token::Enum => Stmt::Enum(self.stmt_enum()?), + Token::Type => Stmt::Type(self.stmt_type()?), + Token::Trait => Stmt::Trait(self.stmt_trait()?), + _ => Stmt::Expr(self.stmt_expr()?), + }; + Some(stmt) + } + + pub fn stmt_type(&mut self) -> Option { + self.expect(Token::Type)?; + let name = self.name()?; + let generics = self.generics()?; + self.expect(Token::Eq)?; + let ty = self.ty()?; + self.expect(Token::SemiColon)?; + Some(StmtType::new(name.span, name, generics, ty)) + } + + pub fn stmt_expr(&mut self) -> Option { + let expr = self.expr()?; + if !matches!(expr, Expr::Block(..) | Expr::Match(..)) { + self.expect(Token::SemiColon)?; + } + Some(expr) + } + + pub fn unresolved_path(&mut self) -> Option { + let mut segments = vec![]; + segments.push(self.unresolved_path_segment()?); + while self.optional(Token::ColonColon).is_some() { + segments.push(self.unresolved_path_segment()?); + } + Some(UnresolvedPath::new(segments)) + } + + pub fn unresolved_path_segment(&mut self) -> Option<(Name, Vec)> { + let name = self.name()?; + let ts = self.ty_args()?; + Some((name, ts)) + } + + pub fn stmt_def(&mut self) -> Option { + let s0 = self.expect(Token::Def)?; + let name = self.name()?; + let generics = self.generics()?; + let params = self.params()?; + self.expect(Token::Colon)?; + let ty = self.ty()?; + let trs = self.where_clause(|this| matches!(this.peek(), Token::Eq | Token::LBrace))?; + let expr = self.expr_or_block(Self::stmt_expr)?; + Some(StmtDef::new( + s0 + expr.span(), + name, + generics, + trs, + params, + ty, + Body::Expr(expr), + )) + } + + fn where_clause(&mut self, cond: impl Fn(&mut Self) -> bool) -> Option> { + if self.peek() == Token::Where { + self.advance(); + self.comma_sep_until_cond(Self::bound, cond) + } else { + Some(vec![]) + } + } + + pub fn stmt_trait(&mut self) -> Option { + let s0 = self.expect(Token::Trait)?; + let name = self.name()?; + let generics = self.generics()?; + let body = self.where_clause(|this| this.peek() == Token::LBrace)?; + self.expect(Token::LBrace)?; + let mut defs = Vec::new(); + let mut tys = Vec::new(); + loop { + match self.peek() { + Token::Def => defs.push(self.stmt_def_decl()?), + Token::Type => tys.push(self.stmt_type_decl()?), + _ => break, + } + } + let s1 = self.expect(Token::RBrace)?; + Some(StmtTrait::new(s0 + s1, name, generics, body, defs, tys)) + } + + fn stmt_def_decl(&mut self) -> Option { + let s0 = self.expect(Token::Def)?; + let name = self.name()?; + let generics = self.generics()?; + let params = self.params()?; + self.expect(Token::Colon)?; + let ty = self.ty()?; + let trs = self.where_clause(|this| this.peek() == Token::SemiColon)?; + let s1 = self.expect(Token::SemiColon)?; + Some(TraitDef::new(s0 + s1, name, generics, trs, params, ty)) + } + + fn stmt_type_decl(&mut self) -> Option { + self.expect(Token::Type)?; + let name = self.name()?; + let generics = self.generics()?; + self.expect(Token::SemiColon)?; + Some(TraitType::new(name.span, name, generics)) + } + + pub fn stmt_impl(&mut self) -> Option { + let s0 = self.expect(Token::Impl)?; + let generics = self.generics()?; + let head = self.bound()?; + let body = self.where_clause(|this| this.peek() == Token::LBrace)?; + self.expect(Token::LBrace)?; + let mut defs = Vec::new(); + let mut tys = Vec::new(); + loop { + match self.peek() { + Token::Def => defs.push(self.stmt_def()?), + Token::Type => tys.push(self.stmt_type()?), + _ => break, + } + } + let s1 = self.expect(Token::RBrace)?; + Some(StmtImpl::new(s0 + s1, generics, head, body, defs, tys)) + } + + pub fn stmt_struct(&mut self) -> Option { + let s0 = self.expect(Token::Struct)?; + let name = self.name()?; + let generics = self.generics()?; + let fields = if self.peek() == Token::LParen { + self.comma_sep(Self::ty_field, Token::LParen, Token::RParen)? + } else { + vec![] + }; + self.expect(Token::SemiColon)?; + Some(StmtStruct::new(s0, name, generics, fields)) + } + + fn ty_field(&mut self) -> Option<(Name, Type)> { + let name = self.name()?; + self.expect(Token::Colon)?; + let ty = self.ty()?; + Some((name, ty)) + } + + pub fn stmt_enum(&mut self) -> Option { + let s0 = self.expect(Token::Enum)?; + let name = self.name()?; + let generics = self.generics()?; + let variants = self.comma_sep(Self::ty_variant, Token::LBrace, Token::RBrace)?; + Some(StmtEnum::new(s0, name, generics, variants)) + } + + fn ty_variant(&mut self) -> Option<(Name, Type)> { + let name = self.name()?; + let ty = if let Token::LParen = self.peek() { + self.ty_paren()? + } else { + Type::Unresolved(UnresolvedPath::new(vec![(Name::from("Unit"), vec![])])) + }; + Some((name, ty)) + } + + // Returns Either::A(T) for (T) + // Returns Either::B((Span, Vec)) for (), (T,), (T, T, ...) + fn paren( + &mut self, + f: impl Fn(&mut Self) -> Option, + ) -> Option)>> { + let s0 = self.expect(Token::LParen)?; + if let Some(s1) = self.optional(Token::RParen) { + Some(Either::B((s0 + s1, vec![]))) + } else { + let v = f(self)?; + if self.optional(Token::RParen).is_some() { + Some(Either::A(v)) + } else { + let mut vs = vec![v]; + while self.optional(Token::Comma).is_some() { + if self.peek() == Token::RParen { + break; + } else { + vs.push(f(self)?); + } + } + let s1 = self.expect(Token::RParen)?; + Some(Either::B((s0 + s1, vs))) + } + } + } + + fn ty_paren(&mut self) -> Option { + match self.paren(Self::ty)? { + Either::A(t) => Some(t), + Either::B((_, ts)) => Some(Type::Tuple(ts)), + } + } + + fn pat_paren(&mut self) -> Option { + match self.paren(Self::pat)? { + Either::A(p) => Some(p), + Either::B((s, ps)) => Some(Pat::Tuple(s, ty_hole(), ps)), + } + } + + fn expr_paren(&mut self) -> Option { + match self.paren(Self::expr)? { + Either::A(e) => Some(e), + Either::B((s, es)) => Some(Expr::Tuple(s, ty_hole(), es)), + } + } + + fn stmt_assoc_type(&mut self) -> Option<(Name, Type)> { + self.expect(Token::Type)?; + let name = self.name()?; + self.expect(Token::Eq)?; + let ty = self.ty()?; + self.expect(Token::SemiColon)?; + Some((name, ty)) + } + + fn stmt_var(&mut self) -> Option { + let s0 = self.expect(Token::Var)?; + let name = self.name()?; + let ty = if self.optional(Token::Colon).is_some() { + self.ty()? + } else { + ty_hole() + }; + self.expect(Token::Eq)?; + let expr = self.expr()?; + let s1 = self.expect(Token::SemiColon)?; + Some(StmtVar::new(s0 + s1, name, ty, expr)) + } + + pub fn bound(&mut self) -> Option { + let path = self.unresolved_path()?; + let s0 = path.segments.first().unwrap().0.span; + let s1 = path.segments.last().unwrap().0.span; + Some(Bound::Unresolved(s0 + s1, path)) + } + + fn params(&mut self) -> Option> { + self.comma_sep(Self::param, Token::LParen, Token::RParen) + } + + fn param(&mut self) -> Option { + let name = self.name()?; + let ty = self.ty_annot()?; + Some(Param::new(name.span, name, ty)) + } + + fn generics(&mut self) -> Option> { + if self.peek() == Token::LBrack { + self.comma_sep(Self::name, Token::LBrack, Token::RBrack) + } else { + Some(vec![]) + } + } + + fn ty_fun(&mut self) -> Option { + self.expect(Token::Fun)?; + let tys = self.comma_sep(Self::ty, Token::LParen, Token::RParen)?; + self.expect(Token::Colon)?; + let ty = self.ty()?; + Some(Type::Fun(tys, Rc::new(ty))) + } + + pub fn ty(&mut self) -> Option { + self.recursive(|this| this.try_ty(Self::ty0)) + } + + pub fn try_ty(&mut self, f: impl Fn(&mut Self) -> Option) -> Option { + self.or_else(f, |_| Type::Err) + } + + pub fn ty0(&mut self) -> Option { + match self.peek() { + Token::Name => self.ty_name(), + Token::Underscore => self.ty_underscore(), + Token::LParen => self.ty_paren(), + Token::Fun => self.ty_fun(), + _ => None, + } + } + + fn ty_name(&mut self) -> Option { + let path = self.unresolved_path()?; + Some(Type::Unresolved(path)) + } + + fn ty_underscore(&mut self) -> Option { + self.expect(Token::Underscore)?; + Some(ty_hole()) + } + + fn ty_args(&mut self) -> Option> { + if self.peek() == Token::LBrack { + self.comma_sep(Self::ty, Token::LBrack, Token::RBrack) + } else { + Some(vec![]) + } + } + + fn expr_field(&mut self) -> Option<(Name, Expr)> { + let expr = self.expr1()?; + match expr { + Expr::Field(s, t, e, x) => Some((x.clone(), Expr::Field(s, t, e, x))), + Expr::Unresolved(s, t, path) => { + if path.segments.len() == 1 && path.segments[0].1.is_empty() && t == Type::Hole { + let x = path.segments.into_iter().next().unwrap().0; + if self.optional(Token::Eq).is_some() { + let expr = self.expr()?; + Some((x, expr)) + } else { + Some((x.clone(), parsed_expr_var(s, x.to_string().as_str()))) + } + } else { + None + } + } + _ => None, + } + } + + #[inline(always)] + fn expr_block(&mut self) -> Option { + let s0 = self.expect(Token::LBrace)?; + let mut stmts = Vec::new(); + let expr = loop { + let stmt = match self.peek() { + Token::Def => Stmt::Def(self.stmt_def()?), + Token::Var => Stmt::Var(self.stmt_var()?), + Token::Impl => Stmt::Impl(self.stmt_impl()?), + Token::Trait => Stmt::Trait(self.stmt_trait()?), + Token::Struct => Stmt::Struct(self.stmt_struct()?), + Token::Enum => Stmt::Enum(self.stmt_enum()?), + Token::SemiColon => { + self.next(); + continue; + } + Token::RBrace => { + let s1 = self.advance(); + let expr = Expr::Tuple(s0 + s1, ty_hole(), vec![]); + break Expr::Block(s0 + s1, ty_hole(), stmts, Rc::new(expr)); + } + _ => { + let expr = self.expr()?; + if let Expr::Block(..) = expr { + // {{}} + if let Token::RBrace = self.peek() { + let s1 = self.advance(); + break Expr::Block(s0 + s1, ty_hole(), stmts, Rc::new(expr)); + } else { + Stmt::Expr(expr) + } + } else if self.expect(Token::SemiColon).is_some() { + while self.optional(Token::SemiColon).is_some() {} + Stmt::Expr(expr) + } else { + let s1 = self.expect(Token::RBrace)?; + break Expr::Block(s0 + s1, ty_hole(), stmts, Rc::new(expr)); + } + } + }; + stmts.push(stmt); + }; + Some(expr) + } + + fn expr_array(&mut self) -> Option { + let es = self.comma_sep(Self::expr, Token::LBrack, Token::RBrack)?; + Some(Expr::Array(Span::default(), ty_hole(), es)) + } + + fn expr_args(&mut self) -> Option> { + self.comma_sep(Self::expr, Token::LParen, Token::RParen) + } + + fn expr_call(&mut self, e0: Expr) -> Option { + let es = self.expr_args()?; + Some(Expr::Call(e0.span(), ty_hole(), Rc::new(e0), es)) + } + + fn tbinop( + &mut self, + lhs: Expr, + t: Token, + f: impl Fn(&mut Self) -> Option, + trait_name: impl Into, + def_name: impl Into, + ) -> Option { + let s = self.expect(t)?; + let rhs = self.try_expr(f)?; + let op = parsed_expr_assoc(s, trait_name, def_name); + let s1 = lhs.span() + rhs.span(); + Some(Expr::Call(s1, ty_hole(), Rc::new(op), vec![lhs, rhs])) + } + + fn def_binop( + &mut self, + lhs: Expr, + t: Token, + f: impl Fn(&mut Self) -> Option, + def_name: &'static str, + ) -> Option { + let s = self.expect(t)?; + let rhs = self.try_expr(f)?; + let op = parsed_expr_def(s, def_name, vec![]); + let s1 = lhs.span() + rhs.span(); + Some(Expr::Call(s1, ty_hole(), Rc::new(op), vec![lhs, rhs])) + } + + fn unop( + &mut self, + t: Token, + f: impl Fn(&mut Self) -> Option, + trait_name: impl Into, + name: &'static str, + ) -> Option { + let s = self.expect(t)?; + let e = self.try_expr(f)?; + let s1 = s + e.span(); + let op = parsed_expr_assoc(s, trait_name, name); + Some(Expr::Call(s1, ty_hole(), Rc::new(op), vec![e])) + } + + fn expr_dot(&mut self, expr: Expr) -> Option { + let s = self.expect(Token::Dot)?; + match self.peek() { + Token::Name => { + let name = self.name()?; + if let Token::LBrack | Token::LParen = self.peek() { + let ts = self.ty_args()?; + let es = self.expr_args()?; + let span = expr.span() + name.span; + let es = std::iter::once(expr).chain(es).collect::>(); + let e1 = parsed_expr_def(s, name, ts); + Some(Expr::Call(span, ty_hole(), Rc::new(e1), es)) + } else { + Some(Expr::Field(s, ty_hole(), Rc::new(expr), name)) + } + } + Token::Int => { + let i = self.index()?; + Some(Expr::Index(i.span, ty_hole(), Rc::new(expr), i)) + } + _ => None, + } + } + + fn expr_assign(&mut self, lhs: Expr) -> Option { + self.expect(Token::Eq)?; + let rhs = self.try_expr(Self::expr9)?; + let s1 = lhs.span() + rhs.span(); + Some(Expr::Assign(s1, ty_hole(), Rc::new(lhs), Rc::new(rhs))) + } + + // a? + // + // becomes + // + // match a { + // Some(x) => x, + // _ => return None, + // } + fn expr_question(&mut self, lhs: Expr) -> Option { + let s = self.expect(Token::Question)?; + let p0 = parsed_pat_enum(s, "Option", "Some", parsed_pat_var(s, "x")); + let e0 = parsed_expr_var(s, "x"); + let p1 = Pat::Wildcard(s, ty_hole()); + let e1 = Expr::Return(s, ty_hole(), Rc::new(parsed_expr_enum(s, "Option", "None"))); + let expr = Expr::Match(s, ty_hole(), Rc::new(lhs), vec![(p0, e0), (p1, e1)]); + Some(expr) + } + + fn expr_end(&mut self) -> bool { + matches!( + self.peek(), + Token::SemiColon + | Token::Comma + | Token::RBrace + | Token::RBrack + | Token::RParen + | Token::Eof + ) + } + + fn expr_return(&mut self) -> Option { + let s = self.expect(Token::Return)?; + let e = if self.expr_end() { + Expr::Tuple(s, ty_hole(), vec![]) + } else { + self.try_expr(Self::expr9)? + }; + Some(Expr::Return(s, ty_hole(), Rc::new(e))) + } + + fn expr_continue(&mut self) -> Option { + let s = self.expect(Token::Continue)?; + Some(Expr::Continue(s, ty_hole())) + } + + fn expr_break(&mut self) -> Option { + let s = self.expect(Token::Break)?; + Some(Expr::Break(s, ty_hole())) + } + + fn ty_annot(&mut self) -> Option { + if self.optional(Token::Colon).is_some() { + self.ty() + } else { + Some(ty_hole()) + } + } + + fn expr_fun(&mut self) -> Option { + let s = self.expect(Token::Fun)?; + let ps = self.params()?; + let t = self.ty_annot()?; + let e = self.expr_or_block(Self::expr)?; + Some(Expr::Fun(s + e.span(), ty_hole(), ps, t, Rc::new(e))) + } + + fn expr_query(&mut self) -> Option { + let qs = self.query_stmts()?; + let s = qs.first().unwrap().span() + qs.last().unwrap().span(); + Some(Expr::Query(s, ty_hole(), qs)) + } + + fn end_of_query_stmt(&mut self) -> bool { + matches!( + self.peek(), + Token::From + | Token::Where + | Token::Select + | Token::Group + | Token::Order + | Token::Join + | Token::With + | Token::Over + | Token::Into + | Token::Compute + | Token::SemiColon + | Token::RBrace + | Token::RBrack + | Token::RParen + | Token::Eof + ) + } + + fn query_stmts(&mut self) -> Option> { + let mut qs = Vec::new(); + loop { + let q = match self.peek() { + Token::From => self.query_from()?, + Token::Where => self.query_where()?, + Token::Select => self.query_select()?, + Token::Group => self.query_group()?, + Token::Order => self.query_order()?, + Token::Join => self.query_join()?, + Token::With => self.query_with()?, + Token::Over => self.query_over()?, + Token::Into => self.query_into()?, + Token::Compute => self.query_compute()?, + _ => break, + }; + qs.push(q); + } + Some(qs) + } + + fn name_in_expr(&mut self) -> Option<(Name, Expr)> { + let name = self.name()?; + self.expect(Token::In)?; + let expr = self.expr()?; + Some((name, expr)) + } + + fn query_from(&mut self) -> Option { + let s = self.expect(Token::From)?; + let xes = if self.peek() == Token::LBrace { + self.comma_sep(Self::name_in_expr, Token::LBrace, Token::RBrace)? + } else { + self.comma_sep_until_cond(Self::name_in_expr, Self::end_of_query_stmt)? + }; + Some(Query::From(s, ty_hole(), xes)) + } + + fn query_select(&mut self) -> Option { + let s0 = self.expect(Token::Select)?; + let xes = if self.peek() == Token::LBrace { + self.comma_sep(Self::expr_field, Token::LBrace, Token::RBrace)? + } else { + self.comma_sep_until_cond(Self::expr_field, Self::end_of_query_stmt)? + }; + Some(Query::Select(s0, ty_hole(), xes)) + } + + fn name_eq_expr(&mut self) -> Option<(Name, Expr)> { + let name = self.name()?; + self.expect(Token::Eq)?; + let expr = self.expr()?; + Some((name, expr)) + } + + fn query_with(&mut self) -> Option { + let s0 = self.expect(Token::With)?; + let xes = if self.peek() == Token::LBrace { + self.comma_sep(Self::name_eq_expr, Token::LBrace, Token::RBrace)? + } else { + self.comma_sep_until_cond(Self::name_eq_expr, Self::end_of_query_stmt)? + }; + Some(Query::With(s0, ty_hole(), xes)) + } + + fn query_compute(&mut self) -> Option { + let s0 = self.expect(Token::Compute)?; + let aggs = if self.peek() == Token::LBrace { + self.comma_sep(Self::agg, Token::LBrace, Token::RBrace)? + } else { + self.comma_sep_until_cond(Self::agg, Self::end_of_query_stmt)? + }; + Some(Query::Compute(s0, ty_hole(), aggs)) + } + + fn agg(&mut self) -> Option<(Name, Expr, Expr)> { + let x = self.name()?; + self.expect(Token::Eq)?; + let e0 = self.expr()?; + self.expect(Token::Of)?; + let e1 = self.expr()?; + Some((x, e0, e1)) + } + + fn query_where(&mut self) -> Option { + let s0 = self.expect(Token::Where)?; + let e = self.expr()?; + let s = s0 + e.span(); + Some(Query::Where(s, ty_hole(), Rc::new(e))) + } + + fn query_group(&mut self) -> Option { + let s = self.expect(Token::Group)?; + let xs = self.query_stmt_args(Self::name)?; + self.expect(Token::LBrace)?; + let qs = self.query_stmts()?; + self.expect(Token::RBrace)?; + Some(Query::Group(s, ty_hole(), xs, qs)) + } + + fn query_over(&mut self) -> Option { + let s0 = self.expect(Token::Over)?; + let e = self.expr()?; + self.expect(Token::LBrace)?; + let qs = self.query_stmts()?; + self.expect(Token::RBrace)?; + let s = s0 + e.span(); + Some(Query::Over(s, ty_hole(), Rc::new(e), qs)) + } + + fn query_order(&mut self) -> Option { + let s0 = self.expect(Token::Order)?; + let os = self.query_stmt_args(Self::ordering)?; + Some(Query::Order(s0, ty_hole(), os)) + } + + fn ordering(&mut self) -> Option<(Name, bool)> { + let x = self.name()?; + let k = self.optional(Token::Desc).is_some(); + Some((x, k)) + } + + fn query_join(&mut self) -> Option { + let s = self.expect(Token::Join)?; + let xes = self.query_stmt_args(Self::source)?; + self.expect(Token::On)?; + let e = self.expr()?; + let t = ty_hole(); + Some(Query::Join(s, t, xes, Rc::new(e))) + } + + fn source(&mut self) -> Option<(Name, Expr)> { + let x = self.name()?; + self.expect(Token::In)?; + let e = self.expr()?; + Some((x, e)) + } + + fn query_stmt_args(&mut self, f: impl Fn(&mut Self) -> Option) -> Option> { + if self.peek() == Token::LBrace { + self.comma_sep(f, Token::LBrace, Token::RBrace) + } else { + self.comma_sep_until_cond(f, Self::end_of_query_stmt) + } + } + + fn query_into(&mut self) -> Option { + let s = self.expect(Token::Into)?; + let es = self.query_stmt_args(Self::expr)?; + Some(Query::Into(s, ty_hole(), es)) + } + + fn expr_for(&mut self) -> Option { + self.expect(Token::For)?; + let x = self.name()?; + self.expect(Token::In)?; + let e0 = self.expr()?; + let e1 = self.expr_block()?; + // { + // let it = @IntoIterator::into_iter(e0); + // while true { + // match it.next() { + // Option::Some(x) => e1, + // Option::None => break + // } + // } + // } + Some(expr_block( + [stmt_var( + "it", + ty_hole(), + expr_call( + parsed_expr_assoc(Span::default(), "IntoIterator", "into_iter"), + [e0], + ), + )], + expr_while( + expr_bool(true), + expr_match( + expr_call(expr_var("next"), [expr_var("it")]), + [ + ( + parsed_pat_enum( + Span::default(), + "Option", + "Some", + parsed_pat_var(Span::default(), x), + ), + e1, + ), + ( + parsed_pat_enum(Span::default(), "Option", "None", pat_wild()), + expr_break(), + ), + ], + ), + ), + )) + } + + fn expr_while(&mut self) -> Option { + self.expect(Token::While)?; + let e = self.expr()?; + let e1 = self.expr_block_or_expr()?; + let s = e.span() + e1.span(); + Some(Expr::While(s, ty_hole(), Rc::new(e), Rc::new(e1))) + } + + fn expr_match(&mut self) -> Option { + self.expect(Token::Match)?; + let e = self.expr()?; + let arms = self.comma_sep(Self::arm, Token::LBrace, Token::RBrace)?; + Some(Expr::Match(e.span(), ty_hole(), Rc::new(e), arms)) + } + + fn expr_block_or_expr(&mut self) -> Option { + match self.expr_block()? { + Expr::Block(_, _, ss, e) if ss.is_empty() => Some(e.as_ref().clone()), + e => Some(e), + } + } + + fn expr_if(&mut self) -> Option { + self.expect(Token::If)?; + let e = self.expr()?; + let e1 = self.expr_block_or_expr()?; + let e2 = if self.optional(Token::Else).is_some() { + self.expr_block_or_expr()? + } else { + Expr::Tuple(Span::default(), ty_hole(), vec![]) + }; + let p1 = Pat::Bool(Span::default(), ty_hole(), true); + let p2 = Pat::Wildcard(Span::default(), ty_hole()); + Some(Expr::Match( + e.span() + e1.span() + e2.span(), + ty_hole(), + Rc::new(e), + vec![(p1, e1), (p2, e2)], + )) + } + + fn expr_or_block(&mut self, f: impl Fn(&mut Self) -> Option) -> Option { + if self.peek() == Token::LBrace { + self.expr_block() + } else { + self.expect(Token::Eq)?; + f(self) + } + } + + fn arm(&mut self) -> Option<(Pat, Expr)> { + let p = self.pat()?; + self.expect(Token::FatArrow)?; + let e = self.expr()?; + Some((p, e)) + } + + fn expr_annot(&mut self, e: Expr) -> Option { + self.expect(Token::Colon)?; + let t = self.ty()?; + Some(e.of(t)) + } + + #[inline(always)] + fn expr0(&mut self) -> Option { + match self.peek() { + Token::Int => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + Some(Expr::Int(t.span, ty_hole(), v)) + } + Token::IntSuffix => { + // let t = self.next().unwrap(); + // let v = self.text(t).to_owned(); + todo!() + // let v0 = v0.to_owned(); + // let v1 = format!("postfix_{v1}"); + // let s = self.advance(); + // let e = parsed_expr_def(s, v1, vec![]); + // Some(Expr::Call( + // s, + // ty_hole(), + // Rc::new(e), + // vec![Expr::Int(s, ty_hole(), v0)], + // )) + } + Token::Float => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + Some(Expr::Float(t.span, ty_hole(), v)) + } + Token::FloatSuffix => { + todo!() + // let v0 = v0.to_owned(); + // let v1 = format!("postfix_{v1}"); + // let s = self.advance(); + // let e = parsed_expr_def(s, v1, vec![]); + // Some(Expr::Call( + // s, + // ty_hole(), + // Rc::new(e), + // vec![Expr::Float(s, ty_hole(), v0)], + // )) + } + Token::True => { + let s = self.advance(); + Some(Expr::Bool(s, ty_hole(), true)) + } + Token::String => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + Some(Expr::String(t.span, ty_hole(), v)) + } + Token::False => { + let s = self.advance(); + Some(Expr::Bool(s, ty_hole(), false)) + } + Token::Name => self.expr_path(), + Token::LParen => self.expr_paren(), + Token::LBrack => self.expr_array(), + Token::LBrace => self.expr_block(), + Token::Match => self.expr_match(), + Token::If => self.expr_if(), + Token::From => self.expr_query(), + Token::For => self.expr_for(), + Token::While => self.expr_while(), + _ => None, + } + } + + #[inline(always)] + fn expr1(&mut self) -> Option { + let mut expr = self.try_expr(Self::expr0)?; + loop { + expr = match self.peek() { + Token::LParen => self.expr_call(expr)?, + Token::Dot => self.expr_dot(expr)?, + Token::Question => self.expr_question(expr)?, + _ => break Some(expr), + } + } + } + + #[inline(always)] + fn expr2(&mut self) -> Option { + match self.peek() { + Token::Minus => self.unop(Token::Minus, Self::expr2, "Neg", "neg"), + Token::Not => self.unop(Token::Not, Self::expr2, "Not", "not"), + _ => self.try_expr(Self::expr1), + } + } + + #[inline(always)] + fn expr3(&mut self) -> Option { + let mut expr = self.try_expr(Self::expr2)?; + loop { + expr = match self.peek() { + Token::Colon => self.expr_annot(expr)?, + _ => break Some(expr), + } + } + } + + #[inline(always)] + fn expr4(&mut self) -> Option { + let mut expr = self.try_expr(Self::expr3)?; + loop { + expr = match self.peek() { + Token::Star => self.tbinop(expr, Token::Star, Self::expr3, "Mul", "mul")?, + Token::Slash => self.tbinop(expr, Token::Slash, Self::expr3, "Div", "div")?, + _ => break Some(expr), + } + } + } + + #[inline(always)] + fn expr5(&mut self) -> Option { + let mut expr = self.try_expr(Self::expr4)?; + loop { + expr = match self.peek() { + Token::Plus => self.tbinop(expr, Token::Plus, Self::expr4, "Add", "add")?, + Token::Minus => self.tbinop(expr, Token::Minus, Self::expr4, "Sub", "sub")?, + _ => break Some(expr), + } + } + } + + fn temp(span: Span, id: usize) -> (Expr, impl FnOnce(Expr) -> Stmt) { + let name = Name::from(format!("_{id}")); + let var = parsed_expr_var(span, name.clone()); + let stmt = move |e| Stmt::Var(StmtVar::new(span, name, ty_hole(), e)); + (var, stmt) + } + + // f() == g() => f() == g() + // + // f() == g() == h() => { val _0 = f(); + // val _1 = g(); + // _0 == _1 && _1 == h() } + // + // f() == g() == h() == i() => { val _0 = f(); + // val _1 = g(); + // _0 == _1 && + // { val _2 = h(); + // _1 == _2 } } + #[inline(always)] + fn expr6(&mut self) -> Option { + let lhs = self.try_expr(Self::expr5)?; + let op = match self.peek() { + Token::EqEq => parsed_expr_assoc(self.advance(), "PartialEq", "eq"), + Token::NotEq => parsed_expr_assoc(self.advance(), "PartialEq", "ne"), + Token::Lt => parsed_expr_assoc(self.advance(), "PartialOrd", "lt"), + Token::Gt => parsed_expr_assoc(self.advance(), "PartialOrd", "gt"), + Token::Le => parsed_expr_assoc(self.advance(), "PartialOrd", "le"), + Token::Ge => parsed_expr_assoc(self.advance(), "PartialOrd", "ge"), + _ => return Some(lhs), + }; + let rhs = self.try_expr(Self::expr5)?; + let (lhs_var, lhs_stmt) = Self::temp(lhs.span(), 0); + let (rhs_var, rhs_stmt) = Self::temp(rhs.span(), 1); + let (expr, n) = self.expr6_rec(rhs_var.clone(), 2)?; + let t = ty_hole(); + if n > 2 { + let span = lhs.span() + expr.span(); + let expr_op = Expr::Call(span, t.clone(), Rc::new(op), vec![lhs_var, rhs_var]); + let expr_and = expr_and(expr_op, expr).with_span(span); + let stmts = vec![lhs_stmt(lhs), rhs_stmt(rhs)]; + Some(Expr::Block(span, t, stmts, Rc::new(expr_and))) + } else { + Some(Expr::Call(expr.span(), t, Rc::new(op), vec![lhs, rhs])) + } + } + + fn expr6_rec(&mut self, lhs: Expr, id: usize) -> Option<(Expr, usize)> { + let op = match self.peek() { + Token::EqEq => parsed_expr_assoc(self.advance(), "PartialEq", "eq"), + Token::NotEq => parsed_expr_assoc(self.advance(), "PartialEq", "ne"), + Token::Lt => parsed_expr_assoc(self.advance(), "PartialOrd", "lt"), + Token::Gt => parsed_expr_assoc(self.advance(), "PartialOrd", "gt"), + Token::Le => parsed_expr_assoc(self.advance(), "PartialOrd", "le"), + Token::Ge => parsed_expr_assoc(self.advance(), "PartialOrd", "ge"), + _ => return Some((lhs, id)), + }; + let rhs = self.try_expr(Self::expr5)?; + let span = lhs.span() + rhs.span(); + let (rhs_var, rhs_stmt) = Self::temp(span, id); + let (expr, n) = self.expr6_rec(rhs_var.clone(), id + 1)?; + let t = ty_hole(); + if n > id + 1 { + let span = lhs.span() + expr.span(); + let expr_op = Expr::Call(span, ty_hole(), Rc::new(op), vec![lhs, rhs_var]); + let expr_and = expr_and(expr_op, expr).with_span(span); + let stmts = vec![rhs_stmt(rhs)]; + Some((Expr::Block(span, t, stmts, Rc::new(expr_and)), n)) + } else { + Some((Expr::Call(op.span(), t, Rc::new(op), vec![lhs, rhs]), n)) + } + } + + #[inline(always)] + fn expr7(&mut self) -> Option { + let mut expr = self.try_expr(Self::expr6)?; + loop { + expr = match self.peek() { + Token::And => { + let s = self.advance(); + let rhs = self.try_expr(Self::expr6)?; + expr_and(expr, rhs).with_span(s) + } + Token::Or => { + let s = self.advance(); + let rhs = self.try_expr(Self::expr6)?; + expr_or(expr, rhs).with_span(s) + } + _ => break Some(expr), + } + } + } + + #[inline(always)] + fn expr8(&mut self) -> Option { + let expr = self.try_expr(Self::expr7)?; + match self.peek() { + Token::DotDot => self.def_binop(expr, Token::DotDot, Self::expr7, "range"), + _ => Some(expr), + } + } + + #[inline(always)] + fn expr9(&mut self) -> Option { + let expr = self.try_expr(Self::expr8)?; + match self.peek() { + Token::Eq => self.expr_assign(expr), + _ => Some(expr), + } + } + + #[inline(always)] + fn expr10(&mut self) -> Option { + match self.peek() { + Token::Return => self.expr_return(), + Token::Continue => self.expr_continue(), + Token::Break => self.expr_break(), + Token::Fun => self.expr_fun(), + _ => self.try_expr(Self::expr9), + } + } + + #[inline(always)] + fn try_expr(&mut self, f: impl Fn(&mut Self) -> Option) -> Option { + self.or_else( + #[inline(always)] + |this| f(this), + |s| Expr::Err(s, ty_hole()), + ) + } + + pub fn expr(&mut self) -> Option { + self.recursive( + #[inline(always)] + |this| this.try_expr(Self::expr10), + ) + } + + pub fn pat0(&mut self) -> Option { + match self.peek() { + Token::Name => self.pat_path(), + Token::LParen => self.pat_paren(), + Token::Underscore => self.pat_underscore(), + Token::Int => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + Some(Pat::Int(t.span, ty_hole(), v)) + } + Token::String => { + let t = self.next().unwrap(); + let v = self.text(t).to_owned(); + Some(Pat::String(t.span, ty_hole(), v)) + } + _ => None, + } + } + + pub fn pat1(&mut self) -> Option { + let p = self.pat0()?; + match self.peek() { + Token::Colon => { + self.advance(); + let t = self.ty()?; + Some(p.with_ty(t)) + } + _ => Some(p), + } + } + + pub fn try_pat(&mut self, f: impl Fn(&mut Self) -> Option) -> Option { + self.or_else(f, |s| Pat::Err(s, ty_hole())) + } + + pub fn pat(&mut self) -> Option { + self.recursive(|this| this.try_pat(Self::pat1)) + } + + fn pat_underscore(&mut self) -> Option { + let s = self.expect(Token::Underscore)?; + Some(Pat::Wildcard(s, ty_hole())) + } + + fn pat_args(&mut self) -> Option>> { + if self.peek() == Token::LParen { + Some(Some(self.comma_sep( + Self::pat_arg, + Token::LParen, + Token::RParen, + )?)) + } else { + Some(None) + } + } + + fn pat_arg(&mut self) -> Option { + let mut p = self.pat()?; + if let Pat::Unresolved(_, Type::Hole, path, args) = &mut p { + if path.segments.len() == 1 + && path.segments[0].1.is_empty() + && args.is_none() + && self.optional(Token::Eq).is_some() + { + let x = path.segments.pop().unwrap().0; + let p = self.pat()?; + return Some(PatArg::Named(x, p)); + } + } + Some(PatArg::Unnamed(p)) + } + + fn pat_path(&mut self) -> Option { + let path = self.unresolved_path()?; + let args = self.pat_args()?; + Some(Pat::Unresolved(Span::default(), ty_hole(), path, args)) + } + + fn expr_path(&mut self) -> Option { + let path = self.unresolved_path()?; + Some(Expr::Unresolved(Span::default(), ty_hole(), path)) + } +} diff --git a/crates/compiler/src/parser2.rs b/crates/compiler/src/parser2.rs new file mode 100644 index 0000000..dcf6c54 --- /dev/null +++ b/crates/compiler/src/parser2.rs @@ -0,0 +1,614 @@ +//! https://dl.acm.org/doi/pdf/10.1145/947902.947905 +//! +//! The standard method of adding error recovery to a recursive descent +//! parser has been well described by Wirth in [4] and by Amman in [I]. +//! With this method, one modifies the parsing procedure P corresponding to +//! each syntactic class (nonterminal symbol) S as follows. +//! +//! a) Add a parameter, **followers**, whose value includes the set of input +//! symbols which may legally follow this instance of S. +//! b) On entry to P, test that the current input symbol, **sym**, may legally +//! start an instance of S; if it can't, report an error and read input +//! symbols until reaching a legal starter or follower of S. +//! c) On exit from P, test that **sym** may legally follow this instance of S; +//! if it can't, report an error and read input symbols until reaching a +//! legal follower of S. +//! d) Replace each call to any other parsing procedure Q corresponding to +//! a syntactic class T by the call +//! Q([...] + followers) +//! where [...] is the set of symbols which P expects to follow this +//! instance of T. + +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Index; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::diag::Report; +use crate::lexer::Span; +use crate::lexer::Spanned; +use crate::lexer::Token; + +pub struct Parser<'a, I> +where + I: Iterator>, +{ + input: &'a str, + lexer: std::iter::Peekable, + pub report: Report, + parens: Vec, + braces: Vec, + bracks: Vec, +} + +enum Either { + A(A), + B(B), +} + +impl Token { + fn infix_bp(self) -> Option<(u8, u8)> { + let bp = match self { + Token::DotDot => (1, 2), + Token::And | Token::Or => (1, 2), + Token::EqEq | Token::NotEq | Token::Lt | Token::Gt | Token::Le | Token::Ge => (2, 3), + Token::Plus | Token::Minus => (3, 4), + Token::Star | Token::Slash => (4, 5), + _ => return None, + }; + Some(bp) + } + fn prefix_bp(self) -> Option<((), u8)> { + let bp = match self { + Token::Plus | Token::Minus => ((), 6), + _ => return None, + }; + Some(bp) + } + fn postfix_bp(self) -> Option<(u8, ())> { + let bp = match self { + Token::Question | Token::LParen => (7, ()), + _ => return None, + }; + Some(bp) + } +} + +impl<'a, I> Parser<'a, I> +where + I: Iterator>, +{ + pub fn new(input: &'a str, lexer: I) -> Self { + let lexer = lexer.peekable(); + let report = Report::new(); + Self { + input, + lexer, + report, + parens: Vec::new(), + braces: Vec::new(), + bracks: Vec::new(), + } + } + + // Utility functions + + fn peek(&mut self) -> Spanned { + self.lexer.peek().cloned().unwrap() + } + + fn next(&mut self) -> Spanned { + self.lexer.next().unwrap() + } + + fn skip(&mut self) { + self.next(); + } + + fn text(&self, t: Spanned) -> &'a str { + t.text(self.input) + } + + fn optional(&mut self, token: Token, follow: Token) -> Option> { + if follow.contains(self.peek().value) { + return None; + } + self.start(token | follow, follow).ok().and_then(|t| { + if t.value == token { + Some(t) + } else { + None + } + }) + } + + fn eat(&mut self, token: Token, follow: Token) -> bool { + self.optional(token, follow).is_some() + } + + fn eat_all(&mut self, token: Token, follow: Token) { + while self.eat(token, follow) {} + } + + fn at(&mut self, token: Token) -> bool { + self.peek().value == token + } + + fn peek_span(&mut self) -> Span { + self.peek().span + } + + fn next_span(&mut self) -> Span { + self.next().span + } + + fn balanced(&mut self) -> bool { + self.parens.is_empty() && self.braces.is_empty() && self.bracks.is_empty() + } + + // Error recovery takes closing/opening braces into account + // 1. (+ [)]) => Recover at the second ) and report an error: Unexpected token + + // 2. => Recover at the end of the file and report an error: Unmatched + fn recover(&mut self, first: Token, follow: Token, peek: bool) -> Result, Span> { + loop { + let t = self.peek(); + match t.value { + _ if first.contains(t.value) && self.balanced() => { + if peek { + return Ok(t); + } else { + return Ok(self.next()); + } + } + // Should this be here or after? + // Do we need to check if parens/braces/bracks are balanced? + // * A closing token can be in follow, e.g., (a,b,c) + // * An opening token can be in follow, e.g., f() + _ if follow.contains(t.value) => { + if !self.balanced() { + self.parens.drain(..).for_each(|span| { + self.report.err(span, "Unmatched `(`", "expected `)`"); + }); + self.braces.drain(..).for_each(|span| { + self.report.err(span, "Unmatched `{`", "expected `}`"); + }); + self.bracks.drain(..).for_each(|span| { + self.report.err(span, "Unmatched `[`", "expected `]`"); + }); + } + return Err(t.span); + } + Token::LBrace => self.braces.push(t.span), + Token::LParen => self.parens.push(t.span), + Token::LBrack => self.bracks.push(t.span), + Token::RBrace => { + self.braces.pop(); + } + Token::RParen => { + self.parens.pop(); + } + Token::RBrack => { + self.bracks.pop(); + } + _ => { + self.skip(); + } + }; + } + } + + fn expect(&mut self, expected: Token, follow: Token) -> Result, Span> { + let t = self.peek(); + if t.value == expected { + Ok(self.next()) + } else { + self.report.err( + t.span, + format!("Unexpected token {}", t.value), + format!("expected {expected}"), + ); + self.recover(expected, follow, false) + } + } + + fn start(&mut self, first: Token, follow: Token) -> Result, Span> { + let t = self.peek(); + if !first.contains(t.value) { + self.report.err( + t.span, + format!("Unexpected token {}", t.value), + format!("expected one of {:?}", first), + ); + self.recover(first, follow, true) + } else { + Ok(t) + } + } + + fn expect_token(&mut self, expected: Token, follow: Token) -> Result { + self.expect(expected, follow).map(|t| t.value) + } + + fn seq( + &mut self, + f: impl Fn(&mut Self, Token) -> Result, Span>, + sep: Token, + follow: Token, + ) -> Result>>, Span> { + let mut xs = Vec::new(); + if !follow.contains(self.peek().value) { + let x = f(self, follow | sep)?; + let s0 = x.span; + let mut s1 = x.span; + xs.push(x.value); + while self.eat(sep, follow) { + let x = f(self, follow | sep)?; + s1 = x.span; + xs.push(x.value); + } + return Ok(Some(Spanned::new(s0 + s1, xs))); + } + Ok(None) + } + + fn seq_nonempty( + &mut self, + f: impl Fn(&mut Self, Token) -> Result, Span>, + sep: Token, + follow: Token, + ) -> Result>, Span> { + let x = f(self, follow | sep)?; + let s0 = x.span; + let mut s1 = x.span; + let mut xs = vec![x.value]; + while self.eat(sep, follow) { + let x = f(self, follow | sep)?; + s1 = x.span; + xs.push(x.value); + } + Ok(Spanned::new(s0 + s1, xs)) + } + + // )() => Skip the first + fn group( + &mut self, + open: Token, + close: Token, + f: impl Fn(&mut Self, Token) -> Result>, Span>, + follow: Token, + ) -> Result>, Span> { + let t0 = self.expect(open, follow)?; + let x = f(self, follow | close)?; + let t1 = self.expect(close, follow)?; + Ok(Spanned::new(t0.span + t1.span, x.map(|x| x.value))) + } + + // Terminals + + fn name(&mut self, follow: Token) -> Result, Span> { + let t = self.expect(Token::Name, follow)?; + let v = self.text(t).to_owned(); + let name = Name::new(t.span, v); + Ok(Spanned::new(t.span, name)) + } + + fn index(&mut self, follow: Token) -> Result, Span> { + let t = self.expect(Token::Int, follow)?; + let v = self.text(t); + match v.parse() { + Ok(v) => Ok(Spanned::new(t.span, Index::new(t.span, v))), + Err(e) => { + self.report + .err(t.span, format!("Invalid index `{}`", v), format!("{e}")); + Err(t.span) + } + } + } + + pub fn parse( + &mut self, + f: impl Fn(&mut Self, Token) -> Result, Span>, + ) -> Option { + let t = f(self, Token::Eof); + self.expect(Token::Eof, Token::Eof).ok(); + t.ok().map(|x| x.value) + } + + // The parser + pub fn program(&mut self, follow: Token) -> Result, Span> { + let mut stmts = Vec::new(); + let s0 = self.peek_span(); + let mut s1 = s0; + + while !follow.contains(self.peek().value) { + println!("{:?}", self.peek().value); + match self.stmt(follow | Token::SemiColon) { + Ok(stmt) => { + s1 = stmt.span; + stmts.push(stmt.value); + } + Err(span) => { + s1 = span; + stmts.push(Stmt::Err(span)); + } + } + self.eat_all(Token::SemiColon, follow); + } + Ok(Spanned::new(s0 + s1, Program::new(stmts))) + } + + pub fn stmt(&mut self, follow: Token) -> Result, Span> { + let t = self.start( + Token::Def + | Token::Type + | Token::Trait + | Token::Struct + | Token::Enum + | Token::Impl + | Token::Var, + follow, + )?; + match t.value { + Token::Def => self.stmt_def(follow), + t => todo!("{t}"), + } + } + + fn where_clause(&mut self, follow: Token) -> Result>>, Span> { + if follow.contains(self.peek().value) { + return Ok(None); + } + if let Some(t0) = self.optional(Token::Where, follow) { + let xs = self.bounds(follow)?; + if let Some(xs) = xs { + Ok(Some(Spanned::new(t0.span + xs.span, xs.value))) + } else { + Ok(Some(Spanned::new(t0.span, vec![]))) + } + } else { + Ok(None) + } + } + + fn bounds(&mut self, follow: Token) -> Result>>, Span> { + self.seq(Self::bound, Token::Comma, follow) + } + + fn bound(&mut self, follow: Token) -> Result, Span> { + let x = self.path(follow)?; + Ok(Spanned::new(x.span, Bound::Unresolved(x.span, x.value))) + } + + fn path(&mut self, follow: Token) -> Result, Span> { + let xs = self.seq_nonempty(Self::path_segment, Token::ColonColon, follow)?; + Ok(Spanned::new(xs.span, UnresolvedPath::new(xs.value))) + } + + fn ty_args(&mut self, follow: Token) -> Result>>, Span> { + if self.peek().value == Token::LBrack { + self.group( + Token::LBrack, + Token::RBrack, + |p, follow| p.seq(Self::ty, Token::Comma, follow), + follow, + ) + .map(|x| x.transpose()) + } else { + Ok(None) + } + } + + fn path_segment(&mut self, follow: Token) -> Result)>, Span> { + let name = self.name(follow)?; + let args = self.ty_args(follow)?; + if let Some(args) = args { + Ok(Spanned::new( + name.span + args.span, + (name.value, args.value), + )) + } else { + Ok(Spanned::new(name.span, (name.value, vec![]))) + } + } + + fn ty(&mut self, _follows: Token) -> Result, Span> { + Ok(Spanned::new(Span::default(), Type::Err)) + } + + fn generics(&mut self, follow: Token) -> Result>>, Span> { + if self.peek().value == Token::LBrack { + self.group( + Token::LBrack, + Token::RBrack, + |p, follow| p.seq(Self::name, Token::Comma, follow), + follow, + ) + .map(|x| x.transpose()) + } else { + Ok(None) + } + } + + fn params(&mut self, follow: Token) -> Result>, Span> { + self.group( + Token::LParen, + Token::RParen, + |p, follow| p.seq(Self::param, Token::Comma, follow), + follow, + ) + .map(|x| x.flatten()) + } + + fn param(&mut self, follow: Token) -> Result, Span> { + let name = self.name(follow)?; + self.expect(Token::Colon, follow)?; + let ty = self.ty(follow)?; + let span = name.span + ty.span; + Ok(Spanned::new(span, Param::new(span, name.value, ty.value))) + } + + fn stmt_def(&mut self, follow: Token) -> Result, Span> { + let t0 = self.expect(Token::Def, follow)?; + let name = self.name(follow)?; + let generics = self.generics(follow)?; + let params = self.params(follow)?; + self.expect(Token::Colon, follow)?; + let ty = self.ty(follow.or(Token::Where).or(Token::Eq))?; + let where_clause = self.where_clause(follow.or(Token::Eq))?; + self.expect(Token::Eq, follow)?; + let e = self.expr(follow)?; + Ok(Spanned::new( + t0.span + e.span, + Stmt::Def(StmtDef::new( + t0.span + e.span, + name.value, + generics.map(|x| x.value).unwrap_or_default(), + where_clause.map(|x| x.value).unwrap_or_default(), + params.value, + ty.value, + Body::Expr(e.value), + )), + )) + } + + fn expr_tuple(&mut self, follow: Token) -> Result>>, Span> { + self.group( + Token::LParen, + Token::RParen, + |p, follow| p.seq(Self::expr, Token::Comma, follow), + follow, + ) + } + + fn expr_lhs(&mut self, follow: Token) -> Result, Span> { + let t = self.start( + Token::Int + | Token::Float + | Token::String + | Token::Name + | Token::LParen + | Token::Plus + | Token::Minus, + follow, + )?; + let lhs = match t.value { + Token::Int => { + let t = self.next(); + let v = self.text(t).to_owned(); + Expr::Int(t.span, Type::Hole, v) + } + Token::Float => { + let t = self.next(); + let v = self.text(t).to_owned(); + Expr::Float(t.span, Type::Hole, v) + } + Token::String => { + let t = self.next(); + let v = self.text(t).to_owned(); + Expr::String(t.span, Type::Hole, v) + } + Token::Name => { + let path = self.path(follow)?; + Expr::Unresolved(t.span, Type::Hole, path.value) + } + Token::LParen => { + let t = self.expr_tuple(follow)?; + if let Some(es) = t.value { + if es.len() == 1 { + es.into_iter().next().unwrap() + } else { + Expr::Tuple(t.span, Type::Hole, es) + } + } else { + Expr::Tuple(t.span, Type::Hole, vec![]) + } + } + Token::Plus => { + let op = self.next(); + let ((), rbp) = op.value.prefix_bp().unwrap(); + let rhs = self.expr_bp(follow, rbp)?; + Expr::Postfix(op.span, Type::Hole, op.value, Rc::new(rhs.value)) + } + Token::Minus => { + let op = self.next(); + let ((), rbp) = op.value.prefix_bp().unwrap(); + let rhs = self.expr_bp(follow, rbp)?; + Expr::Postfix(op.span, Type::Hole, op.value, Rc::new(rhs.value)) + } + _ => unreachable!(), + }; + Ok(Spanned::new(t.span, lhs)) + } + + fn expr(&mut self, follow: Token) -> Result, Span> { + self.expr_bp(follow, 0) + } + + fn expr_bp(&mut self, follow: Token, min_bp: u8) -> Result, Span> { + let mut lhs = self + .expr_lhs( + follow + | Token::And + | Token::Or + | Token::DotDot + | Token::EqEq + | Token::NotEq + | Token::Lt + | Token::Gt + | Token::Le + | Token::Ge + | Token::Plus + | Token::Minus + | Token::Star + | Token::Slash, + ) + .unwrap_or_else(|s| Spanned::new(s, Expr::Err(s, Type::Hole))); + loop { + let op = self.peek(); + if follow.contains(op.value) { + break; + } + if let Some((lbp, ())) = op.value.postfix_bp() { + if lbp < min_bp { + break; + } + self.next(); + let span = lhs.span + op.span; + lhs = Spanned::new( + span, + Expr::Postfix(span, Type::Hole, op.value, Rc::new(lhs.value)), + ); + continue; + } + if let Some((lbp, rbp)) = op.value.infix_bp() { + if lbp < min_bp { + break; + } + self.next(); + let rhs = self.expr_bp(follow, rbp)?; + let span = lhs.span + rhs.span; + lhs = Spanned::new( + span, + Expr::Infix( + span, + Type::Hole, + op.value, + Rc::new(lhs.value), + Rc::new(rhs.value), + ), + ); + } else { + break; + } + } + Ok(lhs) + } +} diff --git a/crates/compiler/src/prelude.rs b/crates/compiler/src/prelude.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/crates/compiler/src/prelude.rs @@ -0,0 +1 @@ + diff --git a/crates/compiler/src/print.rs b/crates/compiler/src/print.rs new file mode 100644 index 0000000..4b6e75d --- /dev/null +++ b/crates/compiler/src/print.rs @@ -0,0 +1,215 @@ +use crate::ast::Index; +use crate::ast::Name; +use crate::lexer::Token; + +pub trait Print<'b> { + // Required methods + fn fmt(&mut self) -> &mut std::fmt::Formatter<'b>; + fn get_indent(&mut self) -> &mut usize; + fn should_indent(&mut self) -> bool; + + // Default methods + fn tab(&mut self) -> std::fmt::Result { + for _ in 0..*self.get_indent() { + write!(self.fmt(), " ")?; + } + Ok(()) + } + + fn kw(&mut self, s: &str) -> std::fmt::Result { + write!(self.fmt(), "{}", s) + } + + fn space(&mut self) -> std::fmt::Result { + write!(self.fmt(), " ") + } + + fn punct(&mut self, s: &str) -> std::fmt::Result { + write!(self.fmt(), "{}", s) + } + + fn token(&mut self, t: &Token) -> std::fmt::Result { + write!(self.fmt(), "{t}") + } + + fn newline(&mut self) -> std::fmt::Result { + if !self.should_indent() { + writeln!(self.fmt())?; + } + self.tab() + } + + fn sep<'c, T: 'c>( + &mut self, + sep: &str, + space: bool, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + let mut iter = iter.into_iter(); + if let Some(x) = iter.next() { + f(self, x)?; + for x in iter { + self.punct(sep)?; + if space { + self.space()?; + } + f(self, x)?; + } + } + Ok(()) + } + + fn sep_trailing<'c, T: 'c>( + &mut self, + sep: &str, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + let mut iter = iter.into_iter(); + if let Some(x) = iter.next() { + f(self, x)?; + self.punct(sep)?; + if let Some(x) = iter.next() { + self.space()?; + f(self, x)?; + for x in iter { + self.punct(sep)?; + self.space()?; + f(self, x)?; + } + } + } + Ok(()) + } + + fn comma_sep<'c, T: 'c>( + &mut self, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + self.sep(",", true, iter, f) + } + + fn comma_sep_trailing<'c, T: 'c>( + &mut self, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + self.sep_trailing(",", iter, f) + } + + fn newline_comma_sep<'c, T: 'c>( + &mut self, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + let mut iter = iter.into_iter(); + if let Some(x) = iter.next() { + self.newline()?; + f(self, x)?; + self.punct(",")?; + for x in iter { + self.newline()?; + f(self, x)?; + self.punct(",")?; + } + } + Ok(()) + } + + fn newline_sep<'c, T: 'c>( + &mut self, + iter: impl IntoIterator, + f: impl Fn(&mut Self, &'c T) -> std::fmt::Result, + ) -> std::fmt::Result { + self.sep("\n", false, iter, f) + } + + fn group( + &mut self, + f: impl Fn(&mut Self) -> std::fmt::Result, + l: &str, + r: &str, + ) -> std::fmt::Result { + self.punct(l)?; + f(self)?; + self.punct(r)?; + Ok(()) + } + + fn indented(&mut self, f: impl Fn(&mut Self) -> std::fmt::Result) -> std::fmt::Result { + *self.get_indent() += 1; + f(self)?; + *self.get_indent() -= 1; + Ok(()) + } + + fn brace(&mut self, fun: impl Fn(&mut Self) -> std::fmt::Result) -> std::fmt::Result { + self.group(fun, "{", "}") + } + + fn paren(&mut self, fun: impl Fn(&mut Self) -> std::fmt::Result) -> std::fmt::Result { + self.group(fun, "(", ")") + } + + fn brack(&mut self, fun: impl Fn(&mut Self) -> std::fmt::Result) -> std::fmt::Result { + self.group(fun, "[", "]") + } + + fn name(&mut self, s: &Name) -> std::fmt::Result { + write!(self.fmt(), "{}", &s.data) + } + + fn index(&mut self, i: &Index) -> std::fmt::Result { + write!(self.fmt(), "{}", i.data) + } + + fn lit(&mut self, s: impl std::fmt::Display) -> std::fmt::Result { + write!(self.fmt(), "{}", s) + } + + fn str(&mut self, s: &str) -> std::fmt::Result { + self.punct("\"")?; + self.lit(s)?; + self.punct("\"") + } + + fn scope( + &mut self, + items: &[T], + f: impl Fn(&mut Self, &T) -> std::fmt::Result, + ) -> std::fmt::Result { + self.brace(|this| { + if items.is_empty() { + Ok(()) + } else { + this.indented(|this| { + this.newline()?; + this.newline_sep(items, |this, item| f(this, item)) + })?; + this.newline() + } + }) + } + + fn comma_scope( + &mut self, + items: &[T], + f: impl Fn(&mut Self, &T) -> std::fmt::Result, + ) -> std::fmt::Result { + self.brace(|this| { + if items.is_empty() { + Ok(()) + } else { + this.indented(|this| { + this.newline_sep(items, |this, item| { + f(this, item)?; + this.punct(",") + }) + })?; + this.newline() + } + }) + } +} diff --git a/crates/compiler/src/resolve.rs b/crates/compiler/src/resolve.rs new file mode 100644 index 0000000..1a27b8f --- /dev/null +++ b/crates/compiler/src/resolve.rs @@ -0,0 +1,1223 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::PatArg; +use crate::ast::Program; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::diag::Report; +use crate::lexer::Span; + +fn names_to_string(names: &[T], f: impl FnMut(&T) -> String) -> String { + names.iter().map(f).collect::>().join(", ") +} + +impl std::ops::Deref for Context { + type Target = Stack; + fn deref(&self) -> &Self::Target { + &self.stack + } +} + +impl std::ops::DerefMut for Context { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.stack + } +} + +#[derive(Debug)] +pub struct Stack(Vec); + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Scope(Vec<(Name, Binding)>); + +#[derive(Debug, Clone, PartialEq, Eq)] +enum Binding { + Enum(usize, Vec), + Struct(usize, Vec), + BuiltinType(usize), + BuiltinDef(usize), + Generic, + TypeAlias(usize), + Trait(usize, Vec<(Name, usize)>, Vec<(Name, usize)>), + Var, + Def(usize), +} + +impl Stack { + fn bind(&mut self, name: impl Into, binding: Binding) { + self.0.last_mut().unwrap().0.push((name.into(), binding)); + } + + fn get(&self, x: &Name) -> Option<&Binding> { + self.0.iter().rev().find_map(|s| { + s.0.iter() + .rev() + .find_map(|(y, b)| if y == x { Some(b) } else { None }) + }) + } + + fn traits(&self) -> impl Iterator { + self.0 + .iter() + .rev() + .flat_map(|s| s.0.iter()) + .filter_map(|(x, b)| match b { + Binding::Trait(n, xs0, xs1) => Some((x, *n, xs0.as_slice(), xs1.as_slice())), + _ => None, + }) + } +} + +#[derive(Debug)] +pub struct Context { + stack: Stack, + pub report: Report, +} + +impl Default for Context { + fn default() -> Self { + Self::new() + } +} + +impl Context { + pub fn new() -> Context { + let mut stack = Stack(vec![Scope(vec![])]); + // Types + stack.bind("i32", Binding::BuiltinType(0)); + stack.bind("f32", Binding::BuiltinType(0)); + stack.bind("i64", Binding::BuiltinType(0)); + stack.bind("bool", Binding::BuiltinType(0)); + stack.bind("Vec", Binding::BuiltinType(1)); + stack.bind("VecIterator", Binding::BuiltinType(1)); + stack.bind("Stream", Binding::BuiltinType(1)); + stack.bind("StreamIterator", Binding::BuiltinType(1)); + stack.bind("Option", Binding::BuiltinType(1)); + // Traits + stack.bind( + "Iterator", + Binding::Trait(1, vec![], vec![(Name::from("Item"), 0)]), + ); + stack.bind( + "IntoIterator", + Binding::Trait( + 1, + vec![], + vec![(Name::from("Item"), 0), (Name::from("IntoIter"), 0)], + ), + ); + stack.bind( + "Add", + Binding::Trait( + 2, + vec![(Name::from("add"), 0)], + vec![(Name::from("Output"), 0)], + ), + ); + stack.bind( + "Sub", + Binding::Trait( + 2, + vec![(Name::from("sub"), 0)], + vec![(Name::from("Output"), 0)], + ), + ); + stack.bind( + "Mul", + Binding::Trait( + 2, + vec![(Name::from("mul"), 0)], + vec![(Name::from("Output"), 0)], + ), + ); + stack.bind( + "Div", + Binding::Trait( + 2, + vec![(Name::from("div"), 0)], + vec![(Name::from("Output"), 0)], + ), + ); + stack.bind( + "Eq", + Binding::Trait( + 1, + vec![(Name::from("eq"), 0), (Name::from("ne"), 0)], + vec![], + ), + ); + stack.bind( + "Not", + Binding::Trait(1, vec![(Name::from("not"), 0)], vec![]), + ); + stack.bind( + "Ord", + Binding::Trait(1, vec![(Name::from("cmp"), 0)], vec![]), + ); + stack.bind( + "Clone", + Binding::Trait(1, vec![(Name::from("clone"), 0)], vec![]), + ); + stack.bind("Copy", Binding::Trait(1, vec![], vec![])); + stack.bind( + "Display", + Binding::Trait(1, vec![(Name::from("to_string"), 0)], vec![]), + ); + let report = Report::new(); + Context { stack, report } + } + + fn scoped_block(&mut self, f: F) -> T + where + F: FnOnce(&mut Self) -> T, + { + self.stack.0.push(Scope(vec![])); + let t = f(self); + self.stack.0.pop(); + t + } + + fn not_found(&mut self, name: &Name, expected: &'static str) { + self.report.err( + name.span, + format!("Name `{}` not found.", name), + format!("Expected {}.", expected), + ); + } + + fn unexpected(&mut self, name: &Name, found: &'static str, expected: &'static str) { + self.report.err( + name.span, + format!("Unexpected {found} `{name}`."), + format!("Expected {expected}."), + ); + } + + fn wrong_arity(&mut self, name: &Name, found: usize, expected: usize) { + self.report.err( + name.span, + format!( + "Wrong number of type arguments. Found {}, expected {}", + found, expected + ), + format!("Expected {} arguments.", expected), + ); + } + + fn expected_assoc(&mut self, kind: &'static str, x: &Name) { + self.report.err( + x.span, + format!("Expected an associated {kind} `{x}::<{kind}>`.",), + format!("Expected an associated {kind}."), + ); + } + + fn unexpected_assoc(&mut self, kind0: &'static str, kind1: &'static str, x0: &Name, x1: &Name) { + self.report.err( + x1.span, + format!("Found unexpected associated {kind1} `{x0}::{x1}`.",), + format!("{kind0} `{x0}` has no associated {kind1} `{x1}`.",), + ); + } + + fn wrong_fields(&mut self, name: &Name, found: &[(Name, T)], expected: &[Name]) { + let found = names_to_string(found, |(x, _)| format!("{x}")); + let expected = names_to_string(expected, |x| format!("{x}")); + self.report.err( + name.span, + format!("Wrong fields provided. Found {name}({found}), expected {name}({expected})",), + format!("Expected {name}({expected}) fields."), + ); + } + + fn wrong_items( + &mut self, + kind: &'static str, + name: &Name, + found: &[(Name, usize)], + expected: &[(Name, usize)], + ) { + let found = names_to_string(found, |(x, _)| format!("`{x}`")); + let expected = names_to_string(expected, |(x, _)| format!("`{x}`")); + self.report.err( + name.span, + format!("Wrong {kind}s implemented for {name}. Found {{ {found} }}, expected {{ {expected} }}",), + format!("Expected {{ {expected} }}."), + ); + } + + fn wrong_variant(&mut self, name: &Name, found: &(Name, T), expected: &[Name]) { + let found = &found.0; + let expected = names_to_string(expected, |x| format!("{x}")); + self.report.err( + name.span, + format!("Wrong variant provided. Found {found}, expected {expected}",), + format!("Expected one of {{ {expected} }} variants."), + ); + } + + fn expected_name(&mut self, e: &Expr) { + self.report.err( + e.span(), + "Expected a field label.", + "Only ` = ` is allowed.", + ); + } + + pub fn resolve(&mut self, p: &Program) -> Program { + p.stmts.iter().for_each(|stmt| self.declare_stmt(stmt)); + let stmts = p.stmts.iter().map(|stmt| self.stmt(stmt)).collect(); + Program::new(stmts) + } + + pub fn declare_stmt(&mut self, s: &Stmt) { + match s { + Stmt::Var(_) => {} + Stmt::Def(s) => self.declare_stmt_def(s), + Stmt::Trait(s) => self.declare_stmt_trait(s), + Stmt::Impl(_) => {} + Stmt::Struct(s) => self.declare_stmt_struct(s), + Stmt::Enum(s) => self.declare_stmt_enum(s), + Stmt::Type(s) => self.declare_stmt_type(s), + Stmt::Expr(_) => {} + Stmt::Err(_) => todo!(), + } + } + + pub fn declare_stmt_def(&mut self, s: &StmtDef) { + let name = s.name.clone(); + self.bind(name, Binding::Def(s.generics.len())); + } + + pub fn declare_stmt_trait(&mut self, s: &StmtTrait) { + let name = s.name.clone(); + let def_names = s + .defs + .iter() + .map(|d| (d.name.clone(), d.generics.len())) + .collect(); + let type_names = s + .types + .iter() + .map(|t| (t.name.clone(), t.generics.len())) + .collect(); + self.bind( + name.clone(), + Binding::Trait(s.generics.len(), def_names, type_names), + ); + } + + pub fn declare_stmt_struct(&mut self, s: &StmtStruct) { + let name = s.name.clone(); + let field_names = s.fields.iter().map(|(x, _)| x.clone()).collect(); + self.bind(name.clone(), Binding::Struct(s.generics.len(), field_names)); + } + + pub fn declare_stmt_enum(&mut self, s: &StmtEnum) { + let name = s.name.clone(); + let variant_names = s.variants.iter().map(|(x, _)| x.clone()).collect(); + self.bind(name.clone(), Binding::Enum(s.generics.len(), variant_names)); + } + + pub fn declare_stmt_type(&mut self, s: &StmtType) { + let name = s.name.clone(); + self.bind(name.clone(), Binding::TypeAlias(s.generics.len())); + } + + pub fn stmt(&mut self, s: &Stmt) -> Stmt { + match s { + Stmt::Var(s) => Stmt::Var(self.stmt_var(s)), + Stmt::Def(s) => Stmt::Def(self.stmt_def(s)), + Stmt::Trait(s) => Stmt::Trait(self.stmt_trait(s)), + Stmt::Impl(s) => Stmt::Impl(self.stmt_impl(s)), + Stmt::Struct(s) => Stmt::Struct(self.stmt_struct(s)), + Stmt::Enum(s) => Stmt::Enum(self.stmt_enum(s)), + Stmt::Type(s) => Stmt::Type(self.stmt_type(s)), + Stmt::Expr(s) => Stmt::Expr(self.expr(s)), + Stmt::Err(_) => todo!(), + } + } + + pub fn stmt_var(&mut self, s: &StmtVar) -> StmtVar { + let span = s.span; + let name = s.name.clone(); + let ty = self.ty(&s.ty); + let expr = self.expr(&s.expr); + self.bind(name.clone(), Binding::Var); + StmtVar::new(span, name, ty, expr) + } + + pub fn stmt_def(&mut self, s: &StmtDef) -> StmtDef { + let span = s.span; + let name = s.name.clone(); + self.scoped_block(|ctx| { + let generics = s.generics.clone(); + generics + .iter() + .for_each(|g| ctx.bind(g.clone(), Binding::Generic)); + let preds = s.where_clause.iter().map(|p| ctx.bound(p)).collect(); + let params = s.params.iter().map(|p| ctx.param(p)).collect(); + let ty = ctx.ty(&s.ty); + let body = ctx.body(&s.body); + StmtDef::new(span, name, generics, preds, params, ty, body) + }) + } + + pub fn body(&mut self, body: &Body) -> Body { + match body { + Body::Expr(e) => Body::Expr(self.expr(e)), + Body::Builtin => Body::Builtin, + } + } + + pub fn stmt_trait(&mut self, s: &StmtTrait) -> StmtTrait { + let span = s.span; + let name = s.name.clone(); + self.scoped_block(|ctx| { + let generics = s.generics.clone(); + generics + .iter() + .for_each(|g| ctx.bind(g.clone(), Binding::Generic)); + let body = s.bounds.iter().map(|p| ctx.bound(p)).collect(); + let defs = s.defs.iter().map(|d| ctx.trait_def(d)).collect(); + let types = s.types.clone(); + StmtTrait::new(span, name, generics, body, defs, types) + }) + } + + pub fn trait_def(&mut self, s: &TraitDef) -> TraitDef { + let span = s.span; + let name = s.name.clone(); + let generics = s.generics.clone(); + let preds = s.bounds.iter().map(|p| self.bound(p)).collect(); + let params = s.params.iter().map(|p| self.param(p)).collect(); + let ty = self.ty(&s.ty); + TraitDef::new(span, name, generics, preds, params, ty) + } + + pub fn stmt_impl(&mut self, s: &StmtImpl) -> StmtImpl { + let span = s.span; + let generics = s.generics.clone(); + self.scoped_block(|ctx| { + for generic in &generics { + ctx.bind(generic.clone(), Binding::Generic); + } + let defs = s + .defs + .iter() + .map(|d| (d.name.clone(), d.generics.len())) + .collect(); + let types = s + .types + .iter() + .map(|t| (t.name.clone(), t.generics.len())) + .collect(); + let head = ctx.head(&s.head, Some(&(defs, types))); + let body = s + .where_clause + .iter() + .map(|p| ctx.bound(p)) + .collect::>(); + let defs = s.defs.iter().map(|d| ctx.stmt_def(d)).collect(); + let types = s.types.iter().map(|t| ctx.stmt_type(t)).collect(); + StmtImpl::new(span, generics, head, body, defs, types) + }) + } + + pub fn stmt_struct(&mut self, s: &StmtStruct) -> StmtStruct { + let span = s.span; + let name = s.name.clone(); + self.scoped_block(|ctx| { + let generics = s.generics.clone(); + for generic in &generics { + ctx.bind(generic.clone(), Binding::Generic); + } + let fields = s + .fields + .iter() + .map(|(x, t)| (x.clone(), ctx.ty(t))) + .collect(); + StmtStruct::new(span, name.clone(), generics, fields) + }) + } + + pub fn stmt_enum(&mut self, s: &StmtEnum) -> StmtEnum { + let span = s.span; + let name = s.name.clone(); + self.scoped_block(|ctx| { + let generics = s.generics.clone(); + for generic in &generics { + ctx.bind(generic.clone(), Binding::Generic); + } + let variants = s + .variants + .iter() + .map(|(x, t)| (x.clone(), ctx.ty(t))) + .collect(); + StmtEnum::new(span, name.clone(), generics, variants) + }) + } + + pub fn stmt_type(&mut self, s: &StmtType) -> StmtType { + let span = s.span; + let name = s.name.clone(); + self.scoped_block(|ctx| { + let generics = s.generics.clone(); + generics + .iter() + .for_each(|g| ctx.bind(g.clone(), Binding::Generic)); + let ty = ctx.ty(&s.ty); + StmtType::new(span, name, generics, ty) + }) + } + + pub fn param(&mut self, s: &Param) -> Param { + let span = s.span; + let name = s.name.clone(); + let ty = self.ty(&s.ty); + self.bind(name.clone(), Binding::Var); + Param::new(span, name, ty) + } + + pub fn path(&mut self, p: &UnresolvedPath) -> UnresolvedPath { + let segments = p + .segments + .iter() + .map(|(x, ts)| (x.clone(), ts.iter().map(|t| self.ty(t)).collect::>())) + .collect(); + UnresolvedPath::new(segments) + } + + pub fn ty(&mut self, t: &Type) -> Type { + match t { + Type::Cons(..) => unreachable!(), + Type::Alias(..) => unreachable!(), + Type::Unresolved(p) => self.resolve_type_path(p), + Type::Assoc(..) => unreachable!(), + Type::Hole => Type::Hole, + Type::Var(_) => unreachable!(), + Type::Err => Type::Err, + Type::Generic(x) => Type::Generic(x.clone()), + Type::Fun(ts, t) => { + let ts = ts.iter().map(|t| self.ty(t)).collect(); + let t = self.ty(t); + Type::Fun(ts, Rc::new(t)) + } + Type::Tuple(ts) => { + let ts = ts.iter().map(|t| self.ty(t)).collect(); + Type::Tuple(ts) + } + Type::Record(xts) => { + let xts = xts.iter().map(|(x, t)| (x.clone(), self.ty(t))).collect(); + Type::Record(xts) + } + Type::Array(t, n) => { + let t = self.ty(t); + let n = *n; + Type::Array(Rc::new(t), n) + } + Type::Never => Type::Never, + } + } + + pub fn expr(&mut self, e: &Expr) -> Expr { + let t = self.ty(e.ty()); + let s = e.span(); + match e { + Expr::Def(..) => unreachable!(), + Expr::Var(..) => unreachable!(), + Expr::Unresolved(_s, _t, path) => self.resolve_expr_path(s, t, path), + Expr::Int(s, t, v) => { + let t = self.ty(t); + let v = v.clone(); + Expr::Int(*s, t, v) + } + Expr::Float(s, t, v) => { + let t = self.ty(t); + let v = v.clone(); + Expr::Float(*s, t, v) + } + Expr::Bool(s, t, v) => { + let t = self.ty(t); + Expr::Bool(*s, t, *v) + } + Expr::Tuple(s, t, es) => { + let t = self.ty(t); + let es = es.iter().map(|e| self.expr(e)).collect(); + Expr::Tuple(*s, t, es) + } + Expr::Struct(..) => unreachable!(), + Expr::Enum(..) => unreachable!(), + Expr::Call(s, t, e, es) => self.call(*s, t, e, es), + Expr::String(_, _, v) => { + let v = v.clone(); + Expr::String(s, t, v) + } + Expr::Field(_, _, e, x) => { + let e = self.expr(e); + let x = x.clone(); + Expr::Field(s, t, Rc::new(e), x) + } + Expr::Block(_, _, ss, e) => { + let ss = ss.iter().map(|s| self.stmt(s)).collect(); + let e = self.expr(e); + Expr::Block(s, t, ss, Rc::new(e)) + } + Expr::Query(..) => { + todo!() + } + Expr::Assoc(..) => unreachable!(), + Expr::Index(_, _, e, i) => { + let e = self.expr(e); + let i = *i; + Expr::Index(s, t, Rc::new(e), i) + } + Expr::Array(_, _, es) => { + let es = es.iter().map(|e| self.expr(e)).collect(); + Expr::Array(s, t, es) + } + Expr::Err(_, _) => Expr::Err(s, t), + Expr::Assign(_, _, e0, e1) => { + let e0 = self.expr(e0); + let e1 = self.expr(e1); + let e1 = self.lvalue(&e1); + Expr::Assign(s, t, Rc::new(e0), Rc::new(e1)) + } + Expr::Return(_, _, e) => { + let e = self.expr(e); + Expr::Return(s, t, Rc::new(e)) + } + Expr::Continue(_, _) => Expr::Continue(s, t), + Expr::Break(_, _) => Expr::Break(s, t), + Expr::Fun(_, _, ps, t1, e) => { + let ps = ps.iter().map(|p| self.param(p)).collect(); + let t1 = self.ty(t1); + let e = self.expr(e); + Expr::Fun(s, t, ps, t1, Rc::new(e)) + } + Expr::Match(_, _, e, xps) => { + let e = self.expr(e); + let xps = xps + .iter() + .map(|(p, e)| (self.pat(p), self.expr(e))) + .collect(); + Expr::Match(s, t, Rc::new(e), xps) + } + Expr::While(_, _, e0, e1) => { + let e0 = self.expr(e0); + let e1 = self.expr(e1); + Expr::While(s, t, Rc::new(e0), Rc::new(e1)) + } + Expr::Record(_, _, xes) => { + let xes = xes.iter().map(|(x, e)| (x.clone(), self.expr(e))).collect(); + Expr::Record(s, t, xes) + } + Expr::Value(_, _) => unreachable!(), + Expr::Infix(_, _, _, _, _) => unreachable!(), + Expr::Postfix(_, _, _, _) => unreachable!(), + Expr::Prefix(_, _, _, _) => unreachable!(), + } + } + + fn call(&mut self, s: Span, t1: &Type, e: &Expr, es: &[Expr]) -> Expr { + let t1 = self.ty(t1); + if let Expr::Unresolved(_s, _t, path) = e { + let path = self.path(path); + let mut iter = path.segments.into_iter().peekable(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(&x0) { + Some(Binding::Struct(n, xs)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Expr::Err(s, t1); + } + let ts0 = (ts0.is_empty()) + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Struct", "field", &x0, x1); + return Expr::Err(s, t1); + } + let xs = xs.clone(); + let xes: Vec<_> = es.iter().flat_map(|e| self.field(e)).collect(); + if !Self::fields_are_defined(&xs, &xes) { + self.wrong_fields(&x0, &xes, &xs); + return Expr::Err(s, t1); + } + return Expr::Struct(s, t1, x0, ts0, xes); + } + Some(Binding::Enum(n, xs)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Expr::Err(s, t1); + } + let ts0 = (ts0.is_empty()) + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + if iter.peek().is_none() { + self.expected_assoc("variant", &x0); + return Expr::Err(s, t1); + } + let (x1, ts1) = iter.next().unwrap(); + if !xs.contains(&x1) { + self.unexpected_assoc("Enum", "variant", &x0, &x1); + return Expr::Err(s, t1); + } + if !ts1.is_empty() { + self.wrong_arity(&x1, ts1.len(), 0); + return Expr::Err(s, t1); + } + if let Some((x2, _)) = iter.next() { + self.unexpected_assoc("Enum", "item", &x1, &x2); + return Expr::Err(s, t1); + } + let es = es.iter().map(|e| self.expr(e)).collect::>(); + let e = match es.len() { + 1 => es.into_iter().next().unwrap(), + _ => Expr::Tuple(s, Type::Hole, es), + }; + return Expr::Enum(s, t1, x0, ts0, x1, Rc::new(e)); + } + _ => {} + } + } + let e = self.expr(e); + let es = es.iter().map(|e| self.expr(e)).collect(); + Expr::Call(s, t1, Rc::new(e), es) + } + + fn field(&mut self, e: &Expr) -> Option<(Name, Expr)> { + let s = e.span(); + let t = self.ty(e.ty()); + match e { + Expr::Field(_, _, e, x) => { + let e = self.expr(e); + let x = x.clone(); + Some((x, e)) + } + Expr::Assign(_, _, e0, e1) => { + let e1 = self.expr(e1); + if let Expr::Unresolved(_, _, path) = &**e0 { + let mut iter = path.segments.iter(); + let (x0, ts0) = iter.next().unwrap(); + if !ts0.is_empty() { + self.wrong_arity(x0, ts0.len(), 0); + return None; + } + if iter.next().is_some() { + self.report.err( + x0.span, + format!("Found unexpected associated item `::{x0}`.",), + "Fields no associated items.", + ); + return None; + } + Some((x0.clone(), e1)) + } else { + self.expected_name(e0); + None + } + } + Expr::Unresolved(_, _, path) => { + let mut iter = path.segments.iter(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(x0) { + Some(Binding::Var) => { + if !ts0.is_empty() { + self.wrong_arity(x0, ts0.len(), 0); + return None; + } + if let Some((x1, _)) = iter.next() { + self.report.err( + x1.span, + format!("Found unexpected associated item `::{x1}`.",), + "Variables have no associated items.", + ); + return None; + } + Some((x0.clone(), Expr::Var(s, t, x0.clone()))) + } + Some(b) => { + self.unexpected(x0, b.name(), "variable"); + None + } + None => { + self.not_found(x0, "variable"); + None + } + } + } + _ => { + self.report.err( + e.span(), + "Not a field.", + "Expected ` = `, `` or `.`.", + ); + None + } + } + } + + fn pat(&mut self, p: &Pat) -> Pat { + let t = self.ty(p.ty()); + let s = p.span(); + match p { + Pat::Unresolved(_, _, path, args) => self.resolve_pat_path(s, t, path, args), + Pat::Var(_, _, x) => Pat::Var(s, t, x.clone()), + Pat::Tuple(_, _, ts) => { + let ts = ts.iter().map(|t| self.pat(t)).collect(); + Pat::Tuple(s, t, ts) + } + Pat::Struct(..) => unreachable!(), + Pat::Enum(..) => unreachable!(), + Pat::Int(_, _, v) => Pat::Int(s, t, v.clone()), + Pat::String(_, _, v) => Pat::String(s, t, v.clone()), + Pat::Wildcard(_, _) => Pat::Wildcard(s, t), + Pat::Bool(_, _, v) => Pat::Bool(s, t, *v), + Pat::Err(_, _) => Pat::Err(s, t), + } + } + + fn unnamed_pat_args(&mut self, args: Option>, fieldless: bool) -> Option> { + if args.is_none() && fieldless { + return Some(vec![]); + } + let args = args.unwrap(); + let mut ps = Vec::with_capacity(args.len()); + for arg in args { + match arg { + PatArg::Named(x, p) => { + self.report.err( + x.span, + format!("Expected ``, found `{x} = {p}`.",), + "Expected unnamed pattern ``.", + ); + return None; + } + PatArg::Unnamed(p) => ps.push(p.clone()), + } + } + Some(ps) + } + + fn named_pat_args(&mut self, args: Option>) -> Option> { + if args.is_none() { + return Some(vec![]); + } + let args = args.unwrap(); + let mut xps = Vec::with_capacity(args.len()); + for arg in args { + match arg { + PatArg::Named(x, p) => xps.push((x.clone(), p.clone())), + PatArg::Unnamed(p) => { + self.report.err( + p.span(), + format!("Expected `{p} = `.",), + format!("Expected named pattern `{p} = `."), + ); + return None; + } + } + } + Some(xps) + } + + #[allow(clippy::type_complexity)] + pub fn head( + &mut self, + bound: &Bound, + expected: Option<&(Vec<(Name, usize)>, Vec<(Name, usize)>)>, + ) -> Bound { + let span = bound.span(); + match bound { + Bound::Unresolved(_, path) => self.resolve_bound_path(span, path, expected), + Bound::Trait(_, _, _) => unreachable!(), + Bound::Err(_) => Bound::Err(span), + } + } + + pub fn bound(&mut self, bound: &Bound) -> Bound { + self.head(bound, None) + } + + fn lvalue(&mut self, e: &Expr) -> Expr { + match e { + Expr::Var(s, t, x) => Expr::Var(*s, t.clone(), x.clone()), + Expr::Field(s, t, e, x) => { + let e = self.lvalue(e.as_ref()); + Expr::Field(*s, t.clone(), Rc::new(e), x.clone()) + } + Expr::Index(s, t, e, i) => { + let e = self.lvalue(e.as_ref()); + Expr::Index(*s, t.clone(), Rc::new(e), *i) + } + _ => { + self.report.err( + e.span(), + "Expression is not an lvalue.", + "Only variables, field access, and tuple access are allowed.", + ); + Expr::Err(e.span(), e.ty().clone()) + } + } + } + + fn fields_are_defined(expected: &[Name], provided: &[(Name, T)]) -> bool { + provided.iter().all(|(x, _)| expected.contains(x)) + && expected + .iter() + .all(|x| provided.iter().any(|(y, _)| x == y)) + } + + fn items_are_defined(expected: &[(Name, usize)], provided: &[(Name, usize)]) -> bool { + provided + .iter() + .all(|(x0, n0)| expected.iter().any(|(x1, n1)| x0 == x1 && n0 == n1)) + && expected + .iter() + .all(|(x0, n0)| provided.iter().any(|(x1, n1)| x0 == x1 && n0 == n1)) + } + + #[allow(clippy::type_complexity)] + fn resolve_bound_path( + &mut self, + span: Span, + path: &UnresolvedPath, + expected: Option<&(Vec<(Name, usize)>, Vec<(Name, usize)>)>, + ) -> Bound { + let path = self.path(path); + let mut iter = path.segments.into_iter().peekable(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(&x0) { + Some(Binding::Trait(n, expected_defs, expected_types)) => { + if *n != ts0.len() { + self.wrong_arity(&x0.clone(), ts0.len(), *n); + return Bound::Err(span); + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Trait", "item", &x0, x1); + return Bound::Err(span); + } + if let Some((found_defs, found_types)) = expected { + if !Self::items_are_defined(expected_defs, found_defs) { + let expected_defs = expected_defs.clone(); + self.wrong_items("def", &x0, found_defs, &expected_defs); + return Bound::Err(span); + } + if !Self::items_are_defined(expected_types, found_types) { + let expected_types = expected_types.clone(); + self.wrong_items("type", &x0, found_types, &expected_types); + return Bound::Err(span); + } + } + Bound::Trait(span, x0.clone(), ts0.clone()) + } + Some(b) => { + self.unexpected(&x0, b.name(), "trait"); + Bound::Err(span) + } + None => { + self.not_found(&x0, "trait"); + Bound::Err(span) + } + } + } + + fn resolve_expr_path(&mut self, s: Span, t: Type, path: &UnresolvedPath) -> Expr { + let path = self.path(path); + let mut iter = path.segments.into_iter().peekable(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(&x0) { + Some(Binding::Var) => { + if !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), 0); + return Expr::Err(s, t.clone()); + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Variable", "item", &x0, x1); + return Expr::Err(s, t.clone()); + } + Expr::Var(s, t, x0.clone()) + } + Some(Binding::Def(n)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Expr::Err(s, t); + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Def", "item", &x0, x1); + return Expr::Err(s, t); + } + let ts0 = (ts0.is_empty()) + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + Expr::Def(s, t, x0.clone(), ts0.clone()) + } + // Unit Struct + Some(Binding::Struct(n, xs)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Expr::Err(s, t.clone()); + } + if !xs.is_empty() { + let xs = xs.clone(); + self.wrong_fields::(&x0, &[], &xs); + return Expr::Err(s, t.clone()); + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Struct", "item", &x0, x1); + return Expr::Err(s, t); + } + let ts0 = ts0 + .is_empty() + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + let t = self.ty(&t); + let x0 = x0.clone(); + Expr::Struct(s, t, x0, ts0.clone(), vec![]) + } + Some(Binding::Trait(n, def_names, _)) => { + if *n != ts0.len() && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Expr::Err(s, t); + } + if iter.peek().is_none() { + self.expected_assoc("type", &x0); + return Expr::Err(s, t); + } + let (x1, ts1) = iter.peek().unwrap(); + let result = def_names.iter().find(|(x2, _)| x2 == x1); + if result.is_none() { + self.unexpected_assoc("Trait", "type", &x0, x1); + return Expr::Err(s, t); + } + let (_, n2) = result.unwrap(); + if ts1.len() != *n2 && !ts1.is_empty() { + self.wrong_arity(x1, ts1.len(), *n2); + return Expr::Err(s, t); + } + let ts0 = ts0 + .is_empty() + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + Expr::Assoc(s, t, x0.clone(), ts0.clone(), x1.clone(), ts1.clone()) + } + Some(b) => { + self.unexpected(&x0, b.name(), "expression"); + Expr::Err(s, t.clone()) + } + None => { + for (tr_x, tr_n, tr_def_xs, _) in self.stack.traits() { + for (tr_def_x, tr_def_n) in tr_def_xs { + if &x0 == tr_def_x && (ts0.len() == *tr_def_n || ts0.is_empty()) { + let ts0 = ts0 + .is_empty() + .then(|| (0..*tr_def_n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + let tr_ts = (0..tr_n).map(|_| Type::Hole).collect::>(); + return Expr::Assoc(s, t, tr_x.clone(), tr_ts, tr_def_x.clone(), ts0); + } + } + } + self.not_found(&x0, "expression"); + Expr::Err(s, t.clone()) + } + } + } + + fn resolve_type_path(&mut self, p: &UnresolvedPath) -> Type { + let p = self.path(p); + let mut iter = p.segments.into_iter().peekable(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(&x0) { + Some(Binding::Generic) => { + if !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), 0); + return Type::Err; + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Generic", "item", &x0, x1); + return Type::Err; + } + Type::Generic(x0.clone()) + } + Some(Binding::Enum(n, _) | Binding::Struct(n, _) | Binding::BuiltinType(n)) => { + if ts0.len() != *n { + self.wrong_arity(&x0, ts0.len(), *n); + return Type::Err; + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Type", "item", &x0, x1); + return Type::Err; + } + Type::Cons(x0.clone(), ts0.clone()) + } + Some(Binding::TypeAlias(n)) => { + if *n != ts0.len() { + self.wrong_arity(&x0, ts0.len(), *n); + return Type::Err; + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Type", "item", &x0, x1); + return Type::Err; + } + Type::Alias(x0.clone(), ts0.clone()) + } + Some(Binding::Trait(n, _, type_names)) => { + if *n != ts0.len() { + self.wrong_arity(&x0, ts0.len(), *n); + return Type::Err; + } + if iter.peek().is_none() { + self.expected_assoc("type", &x0); + return Type::Err; + } + let (x1, ts1) = iter.next().unwrap(); + let result = type_names.iter().find(|(x2, _)| x2 == &x1); + if result.is_none() { + self.unexpected_assoc("Trait", "type", &x0, &x1); + return Type::Err; + } + let (_, n2) = result.unwrap(); + if ts1.len() != *n2 { + self.wrong_arity(&x1, ts1.len(), *n2); + return Type::Err; + } + Type::Assoc(x0.clone(), ts0.clone(), x1.clone(), ts1.clone()) + } + Some(b) => { + self.unexpected(&x0, b.name(), "type"); + Type::Err + } + None => { + self.not_found(&x0, "type"); + Type::Err + } + } + } + + fn resolve_pat_path( + &mut self, + s: Span, + t: Type, + path: &UnresolvedPath, + args: &Option>, + ) -> Pat { + let path = self.path(path); + let mut iter = path.segments.into_iter().peekable(); + let (x0, ts0) = iter.next().unwrap(); + match self.get(&x0) { + Some(Binding::Enum(n, xs)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Pat::Err(s, t.clone()); + } + let ts0 = ts0 + .is_empty() + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + if iter.peek().is_none() { + self.expected_assoc("variant", &x0); + return Pat::Err(s, t.clone()); + } + let (x1, ts1) = iter.next().unwrap(); + if !xs.contains(&x1) { + self.unexpected_assoc("Enum", "variant", &x0, &x1); + return Pat::Err(s, t.clone()); + } + if !ts1.is_empty() { + self.wrong_arity(&x1, ts1.len(), 0); + return Pat::Err(s, t.clone()); + } + if let Some((x2, _)) = iter.peek() { + self.unexpected_assoc("Enum", "item", &x1, x2); + return Pat::Err(s, t.clone()); + } + let args = args.clone(); + let xs = xs.clone(); + let result = self.unnamed_pat_args(args, xs.is_empty()); + if result.is_none() { + return Pat::Err(s, t.clone()); + } + let ps = result.unwrap(); + let p = match ps.len() { + 1 => ps.into_iter().next().unwrap(), + _ => Pat::Tuple(s, Type::Hole, ps), + }; + Pat::Enum(s, t, x0.clone(), ts0.clone(), x1.clone(), Rc::new(p)) + } + Some(Binding::Struct(n, xs)) => { + if ts0.len() != *n && !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), *n); + return Pat::Err(s, t.clone()); + } + let ts0 = ts0 + .is_empty() + .then(|| (0..*n).map(|_| Type::Hole).collect()) + .unwrap_or(ts0); + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Struct", "item", &x0, x1); + return Pat::Err(s, t.clone()); + } + let args = args.clone(); + let xs = xs.clone(); + let xps = self.named_pat_args(args); + if xps.is_none() { + return Pat::Err(s, t.clone()); + } + let xps = xps.unwrap(); + if !Self::fields_are_defined(&xs, &xps) { + self.wrong_fields(&x0, &xps, &xs); + return Pat::Err(s, t.clone()); + } + Pat::Struct(s, t, x0.clone(), ts0.clone(), xps) + } + Some(b) => { + self.unexpected(&x0, b.name(), "pattern"); + Pat::Err(s, t.clone()) + } + None => { + if !ts0.is_empty() { + self.wrong_arity(&x0, ts0.len(), 0); + return Pat::Err(s, t.clone()); + } + if let Some((x1, _)) = iter.peek() { + self.unexpected_assoc("Struct", "item", &x0, x1); + return Pat::Err(s, t.clone()); + } + Pat::Var(s, t, x0.clone()) + } + } + } +} + +impl Binding { + fn name(&self) -> &'static str { + match self { + Binding::Enum(_, _) => "enum", + Binding::Struct(_, _) => "struct", + Binding::BuiltinType(_) => "type", + Binding::Generic => "generic", + Binding::TypeAlias(..) => "type alias", + Binding::Trait(..) => "trait", + Binding::Var => "variable", + Binding::Def(..) => "definition", + Binding::BuiltinDef(_) => "builtin def", + } + } +} diff --git a/crates/compiler/src/util.rs b/crates/compiler/src/util.rs new file mode 100644 index 0000000..5d80de0 --- /dev/null +++ b/crates/compiler/src/util.rs @@ -0,0 +1,995 @@ +use std::rc::Rc; + +use crate::ast::Body; +use crate::ast::Bound; +use crate::ast::Expr; +use crate::ast::Index; +use crate::ast::Name; +use crate::ast::Param; +use crate::ast::Pat; +use crate::ast::PatArg; +use crate::ast::Program; +use crate::ast::Query; +use crate::ast::Stmt; +use crate::ast::StmtDef; +use crate::ast::StmtEnum; +use crate::ast::StmtImpl; +use crate::ast::StmtStruct; +use crate::ast::StmtTrait; +use crate::ast::StmtType; +use crate::ast::StmtVar; +use crate::ast::TraitDef; +use crate::ast::TraitType; +use crate::ast::Type; +use crate::ast::UnresolvedPath; +use crate::lexer::Span; + +pub fn program(ss: [Stmt; N]) -> Program { + Program::new(vec(ss)) +} + +pub fn stmt_trait( + x: &'static str, + gs: [&'static str; N], + body: [Bound; M], + defs: [TraitDef; K], + types: [TraitType; L], +) -> Stmt { + StmtTrait::new( + span(), + name(x), + map(gs, name), + vec(body), + vec(defs), + vec(types), + ) + .into() +} + +fn vec(xs: [T; N]) -> Vec { + xs.into_iter().collect() +} + +fn map(xs: [T; N], f: impl Fn(T) -> U) -> Vec { + xs.into_iter().map(f).collect() +} + +// Create a Rule: +// impl<{gs}> {head} where {body} +pub fn stmt_impl( + gs: [&'static str; N], + head: Bound, + body: [Bound; M], + defs: [Stmt; K], + types: [Stmt; L], +) -> Stmt { + StmtImpl::new( + span(), + map(gs, name), + head, + vec(body), + map(defs, |s| { + if let Stmt::Def(s) = s { + s + } else { + unreachable!() + } + }), + map(types, |s| { + if let Stmt::Type(s) = s { + s + } else { + unreachable!() + } + }), + ) + .into() +} + +// Create a Fact: +// impl<{gs}> {head} +pub fn fact( + gs: [&'static str; N], + head: Bound, + defs: [StmtDef; M], + types: [StmtType; K], +) -> StmtImpl { + StmtImpl::new( + span(), + map(gs, name), + head, + vec([]), + vec(defs), + vec(types), + ) +} + +// Create a predicate: +// {t0}: {name}<{t1},..,{tn},{assoc}> +pub fn bound(x: &'static str, types: [Type; N]) -> Bound { + Bound::Trait(span(), name(x), vec(types)) +} + +pub fn bound_err() -> Bound { + Bound::Err(span()) +} + +pub fn ty_alias(x: &'static str, ts: [Type; N]) -> Type { + Type::Alias(name(x), vec(ts)) +} + +pub fn ty(x: &'static str) -> Type { + debug_assert!(!x.starts_with('?')); + ty_con(x, []) +} + +pub fn ty_err() -> Type { + Type::Err +} + +pub fn ty_hole() -> Type { + Type::Hole +} + +pub fn name(x: &'static str) -> Name { + Name::from(x) +} + +pub fn ty_con(x: &'static str, types: [Type; N]) -> Type { + Type::Cons(name(x), vec(types)) +} + +pub fn ty_tuple(ts: [Type; N]) -> Type { + Type::Tuple(vec(ts)) +} + +pub fn ty_fun(ts: [Type; N], t: Type) -> Type { + Type::Fun(vec(ts), Rc::new(t)) +} + +pub fn ty_var(x: &'static str) -> Type { + debug_assert!(x.starts_with('?')); + Type::Var(name(x)) +} + +pub fn ty_gen(x: &'static str) -> Type { + Type::Generic(name(x)) +} + +pub fn ty_assoc( + x0: &'static str, + ts0: [Type; N], + x1: &'static str, + ts1: [Type; M], +) -> Type { + Type::Assoc(name(x0), vec(ts0), name(x1), vec(ts1)) +} + +pub mod unresolved { + use std::rc::Rc; + + use super::parsed_expr_def; + use super::vec; + use crate::ast::Bound; + use crate::ast::Expr; + use crate::ast::Name; + use crate::ast::Pat; + use crate::ast::PatArg; + use crate::ast::Type; + use crate::ast::UnresolvedPath; + + use super::expr_assign; + use super::expr_call; + use super::map; + use super::name; + use super::parsed_expr_var; + use super::span; + use super::ty_hole; + + pub fn bound(x: &'static str, ts: [Type; N]) -> Bound { + Bound::Unresolved(span(), unresolved_name(x, ts)) + } + + pub fn pat_var(x: &'static str) -> Pat { + Pat::Unresolved(span(), ty_hole(), unresolved_name(x, []), None) + } + + pub fn expr_var(x: &'static str) -> Expr { + parsed_expr_var(span(), x) + } + + pub fn expr_struct( + x: &'static str, + ts: [Type; N], + xes: [(&'static str, Expr); M], + ) -> Expr { + Expr::Call( + span(), + ty_hole(), + Rc::new(parsed_expr_def(span(), x, vec(ts))), + map(xes, |(x, e)| expr_assign(parsed_expr_var(span(), x), e)), + ) + } + + pub fn expr_def(x: &'static str, ts: [Type; N]) -> Expr { + Expr::Unresolved(span(), ty_hole(), unresolved_name(x, ts)) + } + + pub fn expr_variant( + x0: &'static str, + ts: [Type; N], + x1: &'static str, + es: [Expr; M], + ) -> Expr { + Expr::Call( + span(), + ty_hole(), + Rc::new(Expr::Unresolved( + span(), + ty_hole(), + path([(name(x0), vec(ts)), (name(x1), vec([]))]), + )), + vec(es), + ) + } + + pub fn expr_unit_variant( + x0: &'static str, + ts: [Type; N], + x1: &'static str, + ) -> Expr { + Expr::Unresolved( + span(), + ty_hole(), + path([(name(x0), vec(ts)), (name(x1), vec([]))]), + ) + } + pub fn expr_call_direct( + x: &'static str, + ts: [Type; N], + es: [Expr; M], + ) -> Expr { + expr_call(expr_def(x, ts), es) + } + + pub fn pat_enum( + x0: &'static str, + ts: [Type; N], + x1: &'static str, + p: Pat, + ) -> Pat { + Pat::Unresolved( + span(), + ty_hole(), + path([(name(x0), vec(ts)), (name(x1), vec([]))]), + Some(vec([PatArg::Unnamed(p)])), + ) + } + + pub fn pat_struct( + x0: &'static str, + ts: [Type; N], + xps: [(&'static str, Pat); M], + ) -> Pat { + Pat::Unresolved( + span(), + ty_hole(), + path([(name(x0), vec(ts))]), + Some(map(xps, |(x, p)| PatArg::Named(name(x), p))), + ) + } + + pub fn pat_unit_struct(x: &'static str, ts: [Type; N]) -> Pat { + Pat::Unresolved(span(), ty_hole(), path([(name(x), vec(ts))]), None) + } + + pub fn pat_punned_struct( + x: &'static str, + ts: [Type; N], + ps: [Pat; M], + ) -> Pat { + Pat::Unresolved( + span(), + ty_hole(), + path([(name(x), vec(ts))]), + Some(map(ps, PatArg::Unnamed)), + ) + } + + pub fn path(segments: [(Name, Vec); N]) -> UnresolvedPath { + UnresolvedPath::new(vec(segments)) + } + + pub fn unresolved_name(x: &'static str, ts: [Type; N]) -> UnresolvedPath { + let name = Name::from(x); + let tys = vec(ts); + UnresolvedPath::new(vec([(name, tys)])) + } + + pub fn ty_con(x: &'static str, ts: [Type; N]) -> Type { + Type::Unresolved(UnresolvedPath::new(vec([(name(x), vec(ts))]))) + } + + pub fn ty(x: &'static str) -> Type { + Type::Unresolved(unresolved_name(x, [])) + } + + pub fn ty_assoc(x0: &'static str, ts: [Type; N], x1: &'static str) -> Type { + Type::Unresolved(UnresolvedPath::new(vec([ + (name(x0), vec(ts)), + (name(x1), vec([])), + ]))) + } + pub fn expr_assoc(x0: &'static str, ts: [Type; N], x1: &'static str) -> Expr { + Expr::Unresolved( + span(), + ty_hole(), + path([(name(x0), vec(ts)), (name(x1), vec([]))]), + ) + } +} + +pub fn expr_assoc( + x0: &'static str, + ts0: [Type; N], + x1: &'static str, + ts1: [Type; M], +) -> Expr { + Expr::Assoc( + span(), + ty_hole(), + name(x0), + vec(ts0), + name(x1), + vec(ts1), + ) +} + +pub fn expr_assign(e0: Expr, e1: Expr) -> Expr { + Expr::Assign(span(), ty_hole(), Rc::new(e0), Rc::new(e1)) +} + +// pub fn stmt_mod(x: &'static str, ss: [Stmt; N]) -> Stmt { +// StmtMod::new(span(), name(x), Vec(ss)).into() +// } +// +// pub fn stmt_use(x: [&'static str; N]) -> Stmt { +// StmtUse::new(span(), Path::new(map(x, name))).into() +// } + +pub fn stmt_var(x: &'static str, t: Type, e: Expr) -> Stmt { + StmtVar::new(span(), name(x), t, e).into() +} + +pub fn stmt_type(x: &'static str, generics: [&'static str; N], t: Type) -> Stmt { + StmtType::new(span(), name(x), map(generics, name), t).into() +} + +pub fn stmt_expr(e: Expr) -> Stmt { + Stmt::Expr(e) +} + +pub fn expr_unit() -> Expr { + Expr::Tuple(span(), ty_hole(), vec([])) +} + +pub fn ty_unit() -> Type { + Type::Tuple(vec([])) +} + +pub fn expr_struct( + x: &'static str, + ts: [Type; N], + xes: [(&'static str, Expr); M], +) -> Expr { + Expr::Struct( + span(), + ty_hole(), + name(x), + vec(ts), + map(xes, |(x, e)| (name(x), e)), + ) +} + +pub fn expr_tuple(es: [Expr; N]) -> Expr { + Expr::Tuple(span(), ty_hole(), vec(es)) +} + +pub fn expr_array(es: [Expr; N]) -> Expr { + Expr::Array(span(), ty_hole(), vec(es)) +} + +pub fn expr_index(e1: Expr, i: Index) -> Expr { + Expr::Index(span(), ty_hole(), Rc::new(e1), i) +} + +pub fn index(i: &'static str) -> Index { + Index::new(span(), i.parse().unwrap()) +} + +pub fn expr_field(e: Expr, x: &'static str) -> Expr { + Expr::Field(span(), ty_hole(), Rc::new(e), name(x)) +} + +pub fn expr_enum( + x0: &'static str, + ts: [Type; N], + x1: &'static str, + e: Expr, +) -> Expr { + Expr::Enum( + span(), + ty_hole(), + name(x0), + vec(ts), + name(x1), + Rc::new(e), + ) +} + +pub fn stmt_def( + x: &'static str, + gs: [&'static str; N], + ps: [(&'static str, Type); K], + t: Type, + qs: [Bound; M], + e: Expr, +) -> Stmt { + StmtDef::new( + span(), + name(x), + map(gs, name), + vec(qs), + map(ps, |(s, t)| Param::new(span(), name(s), t)), + t, + Body::Expr(e), + ) + .into() +} + +pub fn tr_def( + x: &'static str, + gs: [&'static str; N], + ps: [(&'static str, Type); K], + qs: [Bound; M], + t: Type, +) -> TraitDef { + TraitDef::new( + span(), + name(x), + map(gs, name), + vec(qs), + map(ps, |(s, t)| Param::new(span(), name(s), t)), + t, + ) +} + +pub fn tr_type(x: &'static str, gs: [&'static str; N]) -> TraitType { + TraitType::new(span(), name(x), map(gs, name)) +} + +pub fn stmt_struct( + x: &'static str, + gs: [&'static str; N], + ps: [(&'static str, Type); M], +) -> Stmt { + StmtStruct::new( + span(), + name(x), + map(gs, name), + map(ps, |(s, t)| (name(s), t)), + ) + .into() +} + +pub fn stmt_enum( + x: &'static str, + gs: [&'static str; N], + ps: [(&'static str, Type); M], +) -> Stmt { + StmtEnum::new( + span(), + name(x), + map(gs, name), + map(ps, |(s, t)| (name(s), t)), + ) + .into() +} + +pub fn expr_call(e: Expr, es: [Expr; N]) -> Expr { + Expr::Call(span(), ty_hole(), Rc::new(e), vec(es)) +} + +pub fn parsed_binop(s: Span, tr: &'static str, op: &'static str, e0: Expr, e1: Expr) -> Expr { + Expr::Call( + s, + ty_hole(), + Rc::new(parsed_expr_assoc(span(), tr, op)), + vec([e0, e1]), + ) +} + +pub fn parsed_expr_unop(s: Span, tr: &'static str, op: &'static str, e: Expr) -> Expr { + Expr::Call( + s, + ty_hole(), + Rc::new(parsed_expr_assoc(span(), tr, op)), + vec([e]), + ) +} + +pub fn expr_add(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "Add", "add", e0, e1) +} + +pub fn expr_sub(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "Sub", "sub", e0, e1) +} + +pub fn expr_mul(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "Mul", "mul", e0, e1) +} + +pub fn expr_div(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "Div", "div", e0, e1) +} + +pub fn expr_eq(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialEq", "eq", e0, e1) +} + +pub fn expr_ne(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialEq", "ne", e0, e1) +} + +pub fn expr_lt(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialOrd", "lt", e0, e1) +} + +pub fn expr_le(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialOrd", "le", e0, e1) +} + +pub fn expr_gt(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialOrd", "gt", e0, e1) +} + +pub fn expr_ge(e0: Expr, e1: Expr) -> Expr { + parsed_binop(span(), "PartialOrd", "ge", e0, e1) +} + +pub fn expr_and(e0: Expr, e1: Expr) -> Expr { + Expr::Match( + span(), + ty_hole(), + Rc::new(e0), + vec([(pat_bool(true), e1), (pat_wild(), expr_bool(false))]), + ) +} + +pub fn expr_or(e0: Expr, e1: Expr) -> Expr { + Expr::Match( + span(), + ty_hole(), + Rc::new(e0), + vec([(pat_bool(true), expr_bool(true)), (pat_wild(), e1)]), + ) +} + +pub fn expr_not(e: Expr) -> Expr { + parsed_expr_unop(span(), "Not", "not", e) +} + +pub fn expr_neg(e: Expr) -> Expr { + parsed_expr_unop(span(), "Neg", "neg", e) +} + +pub fn expr_var(x: &'static str) -> Expr { + Expr::Var(span(), ty_hole(), name(x)) +} + +pub fn pat_var(x: &'static str) -> Pat { + Pat::Var(span(), ty_hole(), name(x)) +} + +pub fn pat_int(i: &'static str) -> Pat { + Pat::Int(span(), ty_hole(), i.to_owned()) +} + +pub fn pat_string(s: &'static str) -> Pat { + Pat::String(span(), ty_hole(), s.to_owned()) +} + +pub fn pat_unit() -> Pat { + Pat::Tuple(span(), ty_hole(), vec([])) +} + +pub fn pat_bool(b: bool) -> Pat { + Pat::Bool(span(), ty_hole(), b) +} + +pub fn pat_wild() -> Pat { + Pat::Wildcard(span(), ty_hole()) +} + +pub fn pat_tuple(ps: [Pat; N]) -> Pat { + Pat::Tuple(span(), ty_hole(), vec(ps)) +} + +pub fn pat_enum(x0: &'static str, ts: [Type; N], x1: &'static str, p: Pat) -> Pat { + Pat::Enum( + span(), + ty_hole(), + name(x0), + vec(ts), + name(x1), + Rc::new(p), + ) +} + +pub fn pat_struct( + x: &'static str, + ts: [Type; N], + xps: [(&'static str, Pat); M], +) -> Pat { + Pat::Struct( + span(), + ty_hole(), + name(x), + vec(ts), + map(xps, |(x, p)| (name(x), p)), + ) +} + +pub fn pat_annot(t: Type, p: Pat) -> Pat { + p.with_ty(t) +} + +pub fn expr_match(e: Expr, arms: [(Pat, Expr); N]) -> Expr { + Expr::Match(span(), ty_hole(), Rc::new(e), vec(arms)) +} + +pub fn expr_def(x: &'static str, ts: [Type; N]) -> Expr { + Expr::Def(span(), ty_hole(), name(x), vec(ts)) +} + +pub fn expr_int(i: &'static str) -> Expr { + Expr::Int(span(), ty_hole(), i.to_owned()) +} + +pub fn expr_float(f: &'static str) -> Expr { + Expr::Float(span(), ty_hole(), f.to_owned()) +} + +pub fn expr_bool(b: bool) -> Expr { + Expr::Bool(span(), ty_hole(), b) +} + +pub fn expr_string(s: &'static str) -> Expr { + Expr::String(span(), ty_hole(), s.to_owned()) +} + +pub fn expr_block(ss: [Stmt; N], e: Expr) -> Expr { + Expr::Block(span(), ty_hole(), vec(ss), Rc::new(e)) +} + +pub fn spanned_expr_block(span: Span, ss: [Stmt; N], e: Expr) -> Expr { + Expr::Block(span, ty_hole(), vec(ss), Rc::new(e)) +} + +pub fn expr_err() -> Expr { + Expr::Err(span(), ty_hole()) +} + +pub fn expr_fun(ps: [&'static str; N], e: Expr) -> Expr { + Expr::Fun( + span(), + ty_hole(), + map(ps, |s| Param::new(span(), name(s), ty_hole())), + ty_hole(), + Rc::new(e), + ) +} + +pub fn expr_fun_typed(ps: [(&'static str, Type); N], t: Type, e: Expr) -> Expr { + Expr::Fun( + span(), + ty_hole(), + map(ps, |(s, t)| Param::new(span(), name(s), t)), + t, + Rc::new(e), + ) +} + +pub fn expr_return(e: Expr) -> Expr { + Expr::Return(span(), ty_hole(), Rc::new(e)) +} + +pub fn expr_continue() -> Expr { + Expr::Continue(span(), ty_hole()) +} + +pub fn expr_break() -> Expr { + Expr::Break(span(), ty_hole()) +} + +pub fn expr_query(qs: [Query; N]) -> Expr { + Expr::Query(span(), ty_hole(), vec(qs)) +} + +pub fn query_select(fields: [(&'static str, Expr); N]) -> Query { + Query::Select(span(), ty_hole(), map(fields, |(s, e)| (name(s), e))) +} + +pub fn query_where(e: Expr) -> Query { + Query::Where(span(), ty_hole(), Rc::new(e)) +} + +pub fn query_from(xes: [(&'static str, Expr); N]) -> Query { + Query::From(span(), ty_hole(), map(xes, |(s, e)| (name(s), e))) +} + +pub fn query_into(es: [Expr; N]) -> Query { + Query::Into(span(), ty_hole(), vec(es)) +} + +pub fn query_with(xes: [(&'static str, Expr); N]) -> Query { + Query::With(span(), ty_hole(), map(xes, |(s, e)| (name(s), e))) +} + +pub fn query_join(xes: [(&'static str, Expr); N], e: Expr) -> Query { + Query::Join( + span(), + ty_hole(), + map(xes, |(s, e)| (name(s), e)), + Rc::new(e), + ) +} + +pub fn query_group(xs: [&'static str; N], qs: [Query; M]) -> Query { + Query::Group(span(), ty_hole(), map(xs, name), vec(qs)) +} + +pub fn query_over(e: Expr, qs: [Query; N]) -> Query { + Query::Over(span(), ty_hole(), Rc::new(e), vec(qs)) +} + +pub fn query_compute(aggs: [(&'static str, Expr, Expr); N]) -> Query { + Query::Compute( + span(), + ty_hole(), + map(aggs, |(x, e0, e1)| (name(x), e0, e1)), + ) +} + +pub fn expr_while(e0: Expr, e1: Expr) -> Expr { + Expr::While(span(), ty_hole(), Rc::new(e0), Rc::new(e1)) +} + +pub fn span() -> Span { + Span::default() +} + +pub fn trim(s: String) -> String { + // Trim space right before \n on each line + s.trim_end() + .lines() + .map(|line| line.trim_end().to_string()) + .collect::>() + .join("\n") +} + +pub fn seg(x: &'static str, ts: [Type; N]) -> (Name, Vec) { + (name(x), vec(ts)) +} + +pub fn parsed_pat_var(s: Span, x: impl Into) -> Pat { + Pat::Unresolved( + s, + ty_hole(), + UnresolvedPath::new(vec([(x.into(), vec([]))])), + Some(vec([])), + ) +} + +pub fn parsed_pat_enum(s: Span, x0: &'static str, x1: &'static str, p: Pat) -> Pat { + Pat::Unresolved( + s, + ty_hole(), + UnresolvedPath::new(vec([(name(x0), vec([])), (name(x1), vec([]))])), + Some(vec([PatArg::Unnamed(p)])), + ) +} + +pub fn parsed_expr_enum(s: Span, x0: &'static str, x1: &'static str) -> Expr { + Expr::Unresolved( + s, + ty_hole(), + UnresolvedPath::new(vec([(name(x0), vec([])), (name(x1), vec([]))])), + ) +} + +pub fn parsed_expr_var(s: Span, x: impl Into) -> Expr { + Expr::Unresolved( + s, + ty_hole(), + UnresolvedPath::new(vec([(x.into(), vec([]))])), + ) +} + +pub fn parsed_expr_def(s: Span, x: impl Into, ts: Vec) -> Expr { + Expr::Unresolved(s, ty_hole(), UnresolvedPath::new(vec([(x.into(), ts)]))) +} + +pub fn parsed_expr_assoc(s: Span, x0: impl Into, x1: impl Into) -> Expr { + Expr::Unresolved( + s, + ty_hole(), + UnresolvedPath::new(vec([(x0.into(), vec([])), (x1.into(), vec([]))])), + ) +} + +pub mod types { + use crate::ast::Type; + + use super::ty; + use super::ty_con; + + pub fn ty_vec(t: Type) -> Type { + ty_con("Vec", [t]) + } + + pub fn ty_stream(t: Type) -> Type { + ty_con("Stream", [t]) + } + + pub fn ty_i32() -> Type { + ty("i32") + } + + pub fn ty_i64() -> Type { + ty("i64") + } + + pub fn ty_bool() -> Type { + ty("bool") + } + + pub fn ty_f32() -> Type { + ty("f32") + } +} + +pub mod traits { + use crate::ast::Bound; + use crate::ast::Stmt; + use crate::ast::StmtImpl; + use crate::ast::Type; + + use super::bound; + use super::map; + use super::name; + use super::span; + use super::stmt_type; + use super::ty_assoc; + use super::vec; + + pub fn imp( + gs: [&'static str; N], + head: Bound, + where_clause: [Bound; M], + defs: [Stmt; K], + types: [Stmt; L], + ) -> StmtImpl { + StmtImpl::new( + span(), + map(gs, name), + head, + vec(where_clause), + map(defs, |s| { + if let Stmt::Def(s) = s { + s + } else { + unreachable!() + } + }), + map(types, |s| { + if let Stmt::Type(s) = s { + s + } else { + unreachable!() + } + }), + ) + } + + pub fn impl_clone( + gs: [&'static str; N], + t: Type, + where_clause: [Bound; M], + ) -> StmtImpl { + imp(gs, tr_clone(t), where_clause, [], []) + } + + pub fn tr_clone(t: Type) -> Bound { + bound("Clone", [t]) + } + + pub fn impl_iterator( + gs: [&'static str; N], + t: Type, + t1: Type, + where_clause: [Bound; M], + ) -> StmtImpl { + imp( + gs, + tr_iterator(t), + where_clause, + [], + [stmt_type("Item", [], t1)], + ) + } + + pub fn tr_iterator(t0: Type) -> Bound { + bound("Iterator", [t0]) + } + + pub fn ty_iterator_item(t: Type) -> Type { + ty_assoc("Iterator", [t], "Item", []) + } + + pub fn impl_add( + gs: [&'static str; N], + ts: [Type; 2], + t: Type, + where_clause: [Bound; M], + ) -> StmtImpl { + imp( + gs, + tr_add(ts), + where_clause, + [], + [stmt_type("Output", [], t)], + ) + } + + pub fn tr_add(ts: [Type; 2]) -> Bound { + bound("Add", ts) + } + + pub fn ty_add_output(ts: [Type; 2]) -> Type { + ty_assoc("Add", ts, "Output", []) + } + + pub fn impl_intoiterator( + gs: [&'static str; N], + self_ty: Type, + item_ty: Type, + intoiter_ty: Type, + where_clause: [Bound; M], + ) -> StmtImpl { + imp( + gs, + tr_intoiterator(self_ty), + where_clause, + [], + [ + stmt_type("Item", [], item_ty), + stmt_type("IntoIter", [], intoiter_ty), + ], + ) + } + + // TODO: Need to be able to apply associated types + pub fn tr_intoiterator(t0: Type) -> Bound { + bound("IntoIterator", [t0]) + } + + pub fn ty_intoiterator_item(t0: Type) -> Type { + ty_assoc("IntoIterator", [t0], "Item", []) + } + + pub fn ty_intoiterator_intoiter(t0: Type) -> Type { + ty_assoc("IntoIterator", [t0], "IntoIter", []) + } +} diff --git a/crates/compiler/tests/display.rs b/crates/compiler/tests/display.rs new file mode 100644 index 0000000..f8d769e --- /dev/null +++ b/crates/compiler/tests/display.rs @@ -0,0 +1,175 @@ +use compiler::util::expr_add; +use compiler::util::expr_bool; +use compiler::util::expr_div; +use compiler::util::expr_eq; +use compiler::util::expr_int; +use compiler::util::expr_mul; +use compiler::util::expr_ne; +use compiler::util::expr_string; +use compiler::util::expr_sub; +use compiler::util::expr_tuple; +use compiler::util::stmt_struct; +use compiler::util::ty; +use compiler::util::ty_fun; +use compiler::util::ty_tuple; + +#[test] +fn test_display_int0() { + let a = expr_int("1").to_string(); + let b = "1"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_float1() { + let a = expr_int("1.0").to_string(); + let b = "1.0"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_string1() { + let a = expr_string("abc").to_string(); + let b = "\"abc\""; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_string2() { + let a = expr_string("abc\ndef").to_string(); + let b = "\"abc\ndef\""; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_bool0() { + let a = expr_bool(true).to_string(); + let b = "true"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_bool1() { + let a = expr_bool(false).to_string(); + let b = "false"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop0() { + let a = expr_add(expr_int("1"), expr_int("2")).to_string(); + let b = "Add::add(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop1() { + let a = expr_sub(expr_int("1"), expr_int("2")).to_string(); + let b = "Sub::sub(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop2() { + let a = expr_mul(expr_int("1"), expr_int("2")).to_string(); + let b = "Mul::mul(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop3() { + let a = expr_div(expr_int("1"), expr_int("2")).to_string(); + let b = "Div::div(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop4() { + let a = expr_eq(expr_int("1"), expr_int("2")).to_string(); + let b = "PartialEq::eq(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop5() { + let a = expr_ne(expr_int("1"), expr_int("2")).to_string(); + let b = "PartialEq::ne(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_binop6() { + let a = expr_add(expr_int("1"), expr_add(expr_int("2"), expr_int("3"))).to_string(); + let b = "Add::add(1, Add::add(2, 3))"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_expr_tuple0() { + let a = expr_tuple([]).to_string(); + let b = "()"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_expr_tuple1() { + let a = expr_tuple([expr_int("1")]).to_string(); + let b = "(1,)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_expr_tuple2() { + let a = expr_tuple([expr_int("1"), expr_int("2")]).to_string(); + let b = "(1, 2)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_type_tuple0() { + let a = ty_tuple([]).to_string(); + let b = "()"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_type_tuple1() { + let a = ty_tuple([ty("i32")]).to_string(); + let b = "(i32,)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_type_tuple2() { + let a = ty_tuple([ty("i32"), ty("i32")]).to_string(); + let b = "(i32, i32)"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_type_fun0() { + let a = ty_fun([ty("i32")], ty("i32")).to_string(); + let b = "fun(i32): i32"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_stmt_struct0() { + let a = stmt_struct("S", [], []).to_string(); + let b = "struct S;"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_stmt_struct1() { + let a = stmt_struct("S", [], [("x", ty("i32"))]).to_string(); + let b = "struct S(x:i32);"; + assert!(a == b, "{}\n{}", a, b); +} + +#[test] +fn test_display_stmt_struct2() { + let a = stmt_struct("S", [], [("x", ty("i32")), ("y", ty("i32"))]).to_string(); + let b = "struct S(x:i32, y:i32);"; + assert!(a == b, "{}\n{}", a, b); +} diff --git a/crates/compiler/tests/infer.rs b/crates/compiler/tests/infer.rs new file mode 100644 index 0000000..c8edb1d --- /dev/null +++ b/crates/compiler/tests/infer.rs @@ -0,0 +1,322 @@ +use compiler::ast::Program; + +macro_rules! ok { + {$s:tt} => { { Program::try_infer(indoc::indoc! { $s }).unwrap_or_else(|(_, s)| panic!("{s}")) } } +} + +macro_rules! ng { + {$s:tt} => { { Program::try_infer(indoc::indoc! { $s }).map(|v| panic!("Unexpected {v}")).unwrap_err() } } +} + +macro_rules! ty { + {$s:tt} => { { Program::try_resolve(indoc::indoc! { $s }).unwrap_or_else(|(_, s)| panic!("{s}")) } } +} + +#[test] +fn test_infer_literal0() { + let a = ok!("1;"); + let b = ty!("1:i32;"); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def0() { + let a = ok!(" + def f(): i32 = 0; + f(); + "); + let b = ty!(" + def f(): i32 = 0:i32; + (f:(fun():i32))():i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def1() { + let a = ok!("def f(x: i32): i32 = 0;"); + let b = ty!("def f(x: i32): i32 = 0:i32;"); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def2() { + let a = ok!(" + def f(x: i32): i32 = x; + f(0); + "); + let b = ty!(" + def f(x: i32): i32 = x:i32; + (f:(fun(i32):i32))(0:i32):i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def3() { + let (a, msg) = ng!("def f(x: i32): f32 = x;"); + let b = ty!("def f(x: i32): f32 = x:i32;"); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); + assert_eq!( + msg, + indoc::indoc! {" + Error: Type mismatch + ╭─[test:1:1] + │ + 1 │ def f(x: i32): f32 = x; + │ ┬┬─ + │ ╰──── Found i32 + │ │ + │ ╰─── Expected f32 + ───╯"} + ) +} + +#[test] +fn test_infer_def4() { + let a = ok!("def f[T](x: T): T = x;"); + let b = ty!("def f[T](x: T): T = x:T;"); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def5() { + let a = ok!(" + def f[T](x: T): T = x; + f(0); + "); + let b = ty!(" + def f[T](x: T): T = x:T; + (f[i32]:(fun(i32):i32))(0:i32):i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def6() { + let a = ok!(" + def f[T](x: T): T = x; + f(0); + f(0.0); + "); + let b = ty!(" + def f[T](x: T): T = x:T; + (f[i32]:(fun(i32):i32))(0:i32):i32; + (f[f32]:(fun(f32):f32))(0.0:f32):f32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def7() { + let a = ok!(" + def f[T](x: T): T = x; + def g[T](x: T): T = f(x); + f(0); + "); + let b = ty!(" + def f[T](x: T): T = x:T; + def g[T](x: T): T = (f[T]:fun(T):T)(x:T):T; + (f[i32]:(fun(i32):i32))(0:i32):i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_def8() { + let a = ok!(" + def f[T](x: T): T = f(x); + "); + let b = ty!(" + def f[T](x: T): T = (f[T]:fun(T):T)(x:T):T; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_struct0() { + let a = ok!(" + struct Foo(x:i32); + Foo(x=0); + "); + let b = ty!(" + struct Foo(x:i32); + Foo(x=(0:i32)):Foo; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_struct1() { + let a = ok!(" + struct Foo[T](x:T); + Foo(x=0); + "); + let b = ty!(" + struct Foo[T](x:T); + Foo[i32](x=(0:i32)):Foo[i32]; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_struct2() { + let a = ok!(" + Foo(x=0); + struct Foo[T](x:T); + "); + let b = ty!(" + Foo[i32](x=(0:i32)):Foo[i32]; + struct Foo[T](x:T); + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_struct3() { + let a = ok!(" + struct Foo[T](x:T); + var s = Foo(x=0); + s.x; + "); + let b = ty!(" + struct Foo[T](x:T); + var s:Foo[i32] = Foo[i32](x=(0:i32)):Foo[i32]; + ((s:Foo[i32]).x):i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_enum0() { + let a = ok!(" + enum Foo { Bar(i32), Baz(f32) } + Foo::Bar(0); + "); + let b = ty!(" + enum Foo { Bar(i32), Baz(f32) } + Foo::Bar(0:i32):Foo; + "); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_infer_enum1() { + let a = ok!(" + enum Foo[T] { Bar(T), Baz(T) } + Foo::Bar(0); + "); + let b = ty!(" + enum Foo[T] { Bar(T), Baz(T) } + Foo[i32]::Bar(0:i32):Foo[i32]; + "); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_infer_impl0() { + let a = ok!(" + trait Foo[T] { def f(x: T): T; } + impl Foo[i32] { def f(x: i32): i32 = x; } + f(0); + "); + let b = ty!(" + trait Foo[T] { def f(x: T): T; } + impl Foo[i32] { def f(x: i32): i32 = x:i32; } + ((Foo[i32]::f):(fun(i32):i32))(0:i32):i32; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_impl1() { + let (_, msg) = ng!(" + trait Foo[T] { def f(x: T): T; } + impl Foo[f32] { def f(x: i32): i32 = x; } + f(0);"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Unsolved goal + ╭─[test:1:7] + │ + 1 │ trait Foo[T] { def f(x: T): T; } + │ ─┬─ + │ ╰─── Could not solve goal + ───╯"} + ); +} + +#[test] +fn test_infer_impl2() { + let a = ok!(" + trait Foo[T] {} + def f[T](x: T): T where Foo[T] = x; + "); + let b = ty!(" + trait Foo[T] {} + def f[T](x: T): T where Foo[T] = x:T; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_impl3() { + let a = ok!(" + trait Foo[T] { def f(x: T): T; } + def g[T](x: T): T where Foo[T] = g(x); + "); + let b = ty!(" + trait Foo[T] { def f(x: T): T; } + def g[T](x: T): T where Foo[T] = (g[T]:fun(T):T)(x:T):T; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_impl4() { + let a = ok!(" + trait Foo[T] { def f(x: T): T; } + impl[T] Foo[T] { def f(x: T): T = x; } + "); + let b = ty!(" + trait Foo[T] { def f(x: T): T; } + impl[T] Foo[T] { def f(x: T): T = x:T; } + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_impl5() { + let a = ok!(" + trait Foo[T] { def f(x: T): T; } + def g[T](x: T): T where Foo[T] = f(x); + "); + let b = ty!(" + trait Foo[T] { def f(x: T): T; } + def g[T](x: T): T where Foo[T] = (Foo[T]::f:fun(T):T)(x:T):T; + "); + assert!(a == b, "{}\n\n{}", a.display_types(), b.display_types()); +} + +#[test] +fn test_infer_impl6() { + let a = ok!(" + trait Foo[T] { def f(x: T): T; } + impl Foo[i32] { def f(x: i32): i32 = x; } + def g[T](x: T): T where Foo[T] = Foo[T]::f(x); + "); + let b = ty!(" + trait Foo[T] { def f(x: T): T; } + impl Foo[i32] { def f(x: i32): i32 = x:i32; } + def g[T](x: T): T where Foo[T] = (Foo[T]::f:fun(T):T)(x:T):T; + "); + assert_eq!(a, b, "{a}\n\n{b}"); +} + +// #[test] +// fn test_infer_add2() { +// let a = ok!("1 + 1;"); +// let b = ty!("Add[i32](1:i32, 1:i32):i32"); +// assert_eq!(a, b, "{a}\n\n{b}"); +// } diff --git a/crates/compiler/tests/interpret.rs b/crates/compiler/tests/interpret.rs new file mode 100644 index 0000000..5e7830f --- /dev/null +++ b/crates/compiler/tests/interpret.rs @@ -0,0 +1,12 @@ +// use compiler::ast::Expr; + +// macro_rules! ok { +// ($e:expr) => { +// Expr::eval(indoc::indoc!($e)) +// }; +// } + +#[test] +fn test_interpret0() { + // let a = ok!("1 + 2 + 3;"); +} diff --git a/crates/compiler/tests/lexer.rs b/crates/compiler/tests/lexer.rs new file mode 100644 index 0000000..845eb8e --- /dev/null +++ b/crates/compiler/tests/lexer.rs @@ -0,0 +1,381 @@ +use compiler::diag::Sources; +use compiler::lexer::Lexer; +use compiler::lexer::Token; + +fn next<'a>(lexer: &mut Lexer<'a>) -> Option<(std::ops::Range, Token, &'a str)> { + lexer + .next() + .map(|t| ((*t.span.start()..*t.span.end()), t.value, lexer.text(t))) +} + +#[test] +fn test_lexer_int0() { + let lexer = &mut Lexer::new(0, "123"); + assert_eq!(next(lexer), Some((0..3, Token::Int, "123"))); + assert_eq!(next(lexer), Some((3..3, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_int_suffix0() { + let lexer = &mut Lexer::new(0, "60s"); + assert_eq!(next(lexer), Some((0..3, Token::IntSuffix, "60s"))); + assert_eq!(next(lexer), Some((3..3, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_int_suffix1() { + let lexer = &mut Lexer::new(0, "60_foo"); + assert_eq!(next(lexer), Some((0..6, Token::IntSuffix, "60_foo"))); + assert_eq!(next(lexer), Some((6..6, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_float0() { + let lexer = &mut Lexer::new(0, "123.456"); + assert_eq!(next(lexer), Some((0..7, Token::Float, "123.456"))); + assert_eq!(next(lexer), Some((7..7, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_float1() { + let lexer = &mut Lexer::new(0, "123."); + assert_eq!(next(lexer), Some((0..4, Token::Float, "123."))); + assert_eq!(next(lexer), Some((4..4, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_float_suffix0() { + let lexer = &mut Lexer::new(0, "60.0ms"); + assert_eq!(next(lexer), Some((0..6, Token::FloatSuffix, "60.0ms"))); + assert_eq!(next(lexer), Some((6..6, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_float_suffix1() { + let lexer = &mut Lexer::new(0, "60.0_foo"); + assert_eq!(next(lexer), Some((0..8, Token::FloatSuffix, "60.0_foo"))); + assert_eq!(next(lexer), Some((8..8, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_name0() { + let lexer = &mut Lexer::new(0, "abc"); + assert_eq!(next(lexer), Some((0..3, Token::Name, "abc"))); + assert_eq!(next(lexer), Some((3..3, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_name1() { + let lexer = &mut Lexer::new(0, "_ _1 _a a_ a_1"); + assert_eq!(next(lexer), Some((0..1, Token::Underscore, "_"))); + assert_eq!(next(lexer), Some((2..4, Token::Name, "_1"))); + assert_eq!(next(lexer), Some((5..7, Token::Name, "_a"))); + assert_eq!(next(lexer), Some((8..10, Token::Name, "a_"))); + assert_eq!(next(lexer), Some((11..14, Token::Name, "a_1"))); + assert_eq!(next(lexer), Some((14..14, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_keywords0() { + let lexer = &mut Lexer::new(0, "def impl struct enum var type"); + assert_eq!(next(lexer), Some((0..3, Token::Def, "def"))); + assert_eq!(next(lexer), Some((4..8, Token::Impl, "impl"))); + assert_eq!(next(lexer), Some((9..15, Token::Struct, "struct"))); + assert_eq!(next(lexer), Some((16..20, Token::Enum, "enum"))); + assert_eq!(next(lexer), Some((21..24, Token::Var, "var"))); + assert_eq!(next(lexer), Some((25..29, Token::Type, "type"))); + assert_eq!(next(lexer), Some((29..29, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_keywords1() { + let lexer = &mut Lexer::new( + 0, + "true false or and if else while for break continue return match fun", + ); + assert_eq!(next(lexer), Some((0..4, Token::True, "true"))); + assert_eq!(next(lexer), Some((5..10, Token::False, "false"))); + assert_eq!(next(lexer), Some((11..13, Token::Or, "or"))); + assert_eq!(next(lexer), Some((14..17, Token::And, "and"))); + assert_eq!(next(lexer), Some((18..20, Token::If, "if"))); + assert_eq!(next(lexer), Some((21..25, Token::Else, "else"))); + assert_eq!(next(lexer), Some((26..31, Token::While, "while"))); + assert_eq!(next(lexer), Some((32..35, Token::For, "for"))); + assert_eq!(next(lexer), Some((36..41, Token::Break, "break"))); + assert_eq!(next(lexer), Some((42..50, Token::Continue, "continue"))); + assert_eq!(next(lexer), Some((51..57, Token::Return, "return"))); + assert_eq!(next(lexer), Some((58..63, Token::Match, "match"))); + assert_eq!(next(lexer), Some((64..67, Token::Fun, "fun"))); + assert_eq!(next(lexer), Some((67..67, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_keywords2() { + let lexer = &mut Lexer::new(0, "from into where select group with over join on"); + assert_eq!(next(lexer), Some((0..4, Token::From, "from"))); + assert_eq!(next(lexer), Some((5..9, Token::Into, "into"))); + assert_eq!(next(lexer), Some((10..15, Token::Where, "where"))); + assert_eq!(next(lexer), Some((16..22, Token::Select, "select"))); + assert_eq!(next(lexer), Some((23..28, Token::Group, "group"))); + assert_eq!(next(lexer), Some((29..33, Token::With, "with"))); + assert_eq!(next(lexer), Some((34..38, Token::Over, "over"))); + assert_eq!(next(lexer), Some((39..43, Token::Join, "join"))); + assert_eq!(next(lexer), Some((44..46, Token::On, "on"))); + assert_eq!(next(lexer), Some((46..46, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_punct0() { + let lexer = &mut Lexer::new(0, "= == != < <= > >= + - * / . .. , : ; ? _ => ::"); + assert_eq!(next(lexer), Some((0..1, Token::Eq, "="))); + assert_eq!(next(lexer), Some((2..4, Token::EqEq, "=="))); + assert_eq!(next(lexer), Some((5..7, Token::NotEq, "!="))); + assert_eq!(next(lexer), Some((8..9, Token::Lt, "<"))); + assert_eq!(next(lexer), Some((10..12, Token::Le, "<="))); + assert_eq!(next(lexer), Some((13..14, Token::Gt, ">"))); + assert_eq!(next(lexer), Some((15..17, Token::Ge, ">="))); + assert_eq!(next(lexer), Some((18..19, Token::Plus, "+"))); + assert_eq!(next(lexer), Some((20..21, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((22..23, Token::Star, "*"))); + assert_eq!(next(lexer), Some((24..25, Token::Slash, "/"))); + assert_eq!(next(lexer), Some((26..27, Token::Dot, "."))); + assert_eq!(next(lexer), Some((28..30, Token::DotDot, ".."))); + assert_eq!(next(lexer), Some((31..32, Token::Comma, ","))); + assert_eq!(next(lexer), Some((33..34, Token::Colon, ":"))); + assert_eq!(next(lexer), Some((35..36, Token::SemiColon, ";"))); + assert_eq!(next(lexer), Some((37..38, Token::Question, "?"))); + assert_eq!(next(lexer), Some((39..40, Token::Underscore, "_"))); + assert_eq!(next(lexer), Some((41..43, Token::FatArrow, "=>"))); + assert_eq!(next(lexer), Some((44..46, Token::ColonColon, "::"))); + assert_eq!(next(lexer), Some((46..46, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_string0() { + let lexer = &mut Lexer::new(0, r#""abc""#); + assert_eq!(next(lexer), Some((0..5, Token::String, "abc"))); + assert_eq!(next(lexer), Some((5..5, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_string1() { + let lexer = &mut Lexer::new(0, r#""abc\"def""#); + assert_eq!(next(lexer), Some((0..10, Token::String, r#"abc\"def"#))); + assert_eq!(next(lexer), Some((10..10, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_char0() { + let lexer = &mut Lexer::new(0, "'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j'"); + assert_eq!(next(lexer), Some((0..3, Token::Char, "a"))); + assert_eq!(next(lexer), Some((4..7, Token::Char, "b"))); + assert_eq!(next(lexer), Some((8..11, Token::Char, "c"))); + assert_eq!(next(lexer), Some((12..15, Token::Char, "d"))); + assert_eq!(next(lexer), Some((16..19, Token::Char, "e"))); + assert_eq!(next(lexer), Some((20..23, Token::Char, "f"))); + assert_eq!(next(lexer), Some((24..27, Token::Char, "g"))); + assert_eq!(next(lexer), Some((28..31, Token::Char, "h"))); + assert_eq!(next(lexer), Some((32..35, Token::Char, "i"))); + assert_eq!(next(lexer), Some((36..39, Token::Char, "j"))); + assert_eq!(next(lexer), Some((39..39, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_char1() { + let lexer = &mut Lexer::new(0, r"'\n' '\t' '\r' '\0' '\\' '\''"); + assert_eq!(next(lexer), Some((0..4, Token::Char, r"\n"))); + assert_eq!(next(lexer), Some((5..9, Token::Char, r"\t"))); + assert_eq!(next(lexer), Some((10..14, Token::Char, r"\r"))); + assert_eq!(next(lexer), Some((15..19, Token::Char, r"\0"))); + assert_eq!(next(lexer), Some((20..24, Token::Char, r"\\"))); + assert_eq!(next(lexer), Some((25..29, Token::Char, r"\'"))); + assert_eq!(next(lexer), Some((29..29, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_separators0() { + let lexer = &mut Lexer::new(0, "[[]] (()) {{}}"); + assert_eq!(next(lexer), Some((0..1, Token::LBrack, "["))); + assert_eq!(next(lexer), Some((1..2, Token::LBrack, "["))); + assert_eq!(next(lexer), Some((2..3, Token::RBrack, "]"))); + assert_eq!(next(lexer), Some((3..4, Token::RBrack, "]"))); + assert_eq!(next(lexer), Some((5..6, Token::LParen, "("))); + assert_eq!(next(lexer), Some((6..7, Token::LParen, "("))); + assert_eq!(next(lexer), Some((7..8, Token::RParen, ")"))); + assert_eq!(next(lexer), Some((8..9, Token::RParen, ")"))); + assert_eq!(next(lexer), Some((10..11, Token::LBrace, "{"))); + assert_eq!(next(lexer), Some((11..12, Token::LBrace, "{"))); + assert_eq!(next(lexer), Some((12..13, Token::RBrace, "}"))); + assert_eq!(next(lexer), Some((13..14, Token::RBrace, "}"))); + assert_eq!(next(lexer), Some((14..14, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_code0() { + let lexer = &mut Lexer::new(0, "--- fn main() {} ---"); + assert_eq!(next(lexer), Some((0..20, Token::Code, " fn main() {} "))); + assert_eq!(next(lexer), Some((20..20, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_code1() { + let lexer = &mut Lexer::new(0, "1 + 2; --- fn main() {} --- 3 + 4;"); + assert_eq!(next(lexer), Some((0..1, Token::Int, "1"))); + assert_eq!(next(lexer), Some((2..3, Token::Plus, "+"))); + assert_eq!(next(lexer), Some((4..5, Token::Int, "2"))); + assert_eq!(next(lexer), Some((5..6, Token::SemiColon, ";"))); + assert_eq!(next(lexer), Some((7..27, Token::Code, " fn main() {} "))); + assert_eq!(next(lexer), Some((28..29, Token::Int, "3"))); + assert_eq!(next(lexer), Some((30..31, Token::Plus, "+"))); + assert_eq!(next(lexer), Some((32..33, Token::Int, "4"))); + assert_eq!(next(lexer), Some((33..34, Token::SemiColon, ";"))); + assert_eq!(next(lexer), Some((34..34, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_code2() { + let lexer = &mut Lexer::new(0, "-- -"); + assert_eq!(next(lexer), Some((0..1, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((1..2, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((3..4, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((4..4, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_code3() { + let lexer = &mut Lexer::new(0, "--- -- - ---"); + assert_eq!(next(lexer), Some((0..12, Token::Code, " -- - "))); + assert_eq!(next(lexer), Some((12..12, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_comments0() { + let lexer = &mut Lexer::new(0, "1 # + 2"); + assert_eq!(next(lexer), Some((0..1, Token::Int, "1"))); + assert_eq!(next(lexer), Some((7..7, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_comments1() { + let lexer = &mut Lexer::new(0, "1 # + 2\n3"); + assert_eq!(next(lexer), Some((0..1, Token::Int, "1"))); + assert_eq!(next(lexer), Some((8..9, Token::Int, "3"))); + assert_eq!(next(lexer), Some((9..9, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_err0() { + let lexer = &mut Lexer::new(0, "\\ % ^ & ~ ` $"); + assert_eq!(next(lexer), Some((0..1, Token::Err, "\\"))); + assert_eq!(next(lexer), Some((2..3, Token::Err, "%"))); + assert_eq!(next(lexer), Some((4..5, Token::Err, "^"))); + assert_eq!(next(lexer), Some((6..7, Token::Err, "&"))); + assert_eq!(next(lexer), Some((8..9, Token::Err, "~"))); + assert_eq!(next(lexer), Some((10..11, Token::Err, "`"))); + assert_eq!(next(lexer), Some((12..13, Token::Err, "$"))); + assert_eq!(next(lexer), Some((13..13, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(!lexer.report.is_empty()); +} + +#[test] +fn test_lexer_err1() { + let mut sources = Sources::new(); + let source = "%"; + let file = sources.add("file", source); + let lexer = &mut Lexer::new(file, source); + assert_eq!(next(lexer), Some((0..1, Token::Err, "%"))); + assert_eq!(next(lexer), Some((1..1, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert_eq!( + lexer.report.string(&mut sources).unwrap(), + indoc::indoc! {" + Error: Unexpected character + ╭─[file:1:1] + │ + 1 │ % + │ ┬ + │ ╰── Unexpected character '%' + ───╯ + + "} + ); +} + +#[test] +fn test_lexer_unused0() { + let lexer = &mut Lexer::new(0, "-> <- ..="); + assert_eq!(next(lexer), Some((0..1, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((1..2, Token::Gt, ">"))); + assert_eq!(next(lexer), Some((3..4, Token::Lt, "<"))); + assert_eq!(next(lexer), Some((4..5, Token::Minus, "-"))); + assert_eq!(next(lexer), Some((6..8, Token::DotDot, ".."))); + assert_eq!(next(lexer), Some((8..9, Token::Eq, "="))); + assert_eq!(next(lexer), Some((9..9, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_eof0() { + let lexer = &mut Lexer::new(0, ""); + assert_eq!(next(lexer), Some((0..0, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} + +#[test] +fn test_lexer_eof1() { + let lexer = &mut Lexer::new(0, " "); + assert_eq!(next(lexer), Some((1..1, Token::Eof, ""))); + assert_eq!(next(lexer), None); + assert!(lexer.report.is_empty()); +} diff --git a/crates/compiler/tests/parser.rs b/crates/compiler/tests/parser.rs new file mode 100644 index 0000000..70531a5 --- /dev/null +++ b/crates/compiler/tests/parser.rs @@ -0,0 +1,1610 @@ +use compiler::ast::Expr; +use compiler::ast::Pat; +use compiler::ast::Program; +use compiler::ast::Stmt; +use compiler::ast::StmtImpl; +use compiler::ast::Type; +use compiler::util::expr_add; +use compiler::util::expr_and; +use compiler::util::expr_array; +use compiler::util::expr_assign; +use compiler::util::expr_block; +use compiler::util::expr_bool; +use compiler::util::expr_break; +use compiler::util::expr_call; +use compiler::util::expr_continue; +use compiler::util::expr_div; +use compiler::util::expr_eq; +use compiler::util::expr_err; +use compiler::util::expr_field; +use compiler::util::expr_float; +use compiler::util::expr_fun; +use compiler::util::expr_fun_typed; +use compiler::util::expr_ge; +use compiler::util::expr_gt; +use compiler::util::expr_index; +use compiler::util::expr_int; +use compiler::util::expr_le; +use compiler::util::expr_lt; +use compiler::util::expr_match; +use compiler::util::expr_mul; +use compiler::util::expr_ne; +use compiler::util::expr_neg; +use compiler::util::expr_not; +use compiler::util::expr_or; +use compiler::util::expr_query; +use compiler::util::expr_return; +use compiler::util::expr_sub; +use compiler::util::expr_tuple; +use compiler::util::expr_unit; +use compiler::util::index; +use compiler::util::pat_bool; +use compiler::util::pat_int; +use compiler::util::pat_tuple; +use compiler::util::pat_wild; +use compiler::util::program; +use compiler::util::query_compute; +use compiler::util::query_from; +use compiler::util::query_group; +use compiler::util::query_into; +use compiler::util::query_over; +use compiler::util::query_select; +use compiler::util::query_where; +use compiler::util::query_with; +use compiler::util::stmt_def; +use compiler::util::stmt_enum; +use compiler::util::stmt_expr; +use compiler::util::stmt_impl; +use compiler::util::stmt_struct; +use compiler::util::stmt_type; +use compiler::util::stmt_var; +use compiler::util::ty_err; +use compiler::util::ty_fun; +use compiler::util::ty_hole; +use compiler::util::ty_tuple; +use compiler::util::unresolved::bound; +use compiler::util::unresolved::expr_assoc; +use compiler::util::unresolved::expr_call_direct; +use compiler::util::unresolved::expr_def; +use compiler::util::unresolved::expr_struct; +use compiler::util::unresolved::expr_unit_variant; +use compiler::util::unresolved::expr_var; +use compiler::util::unresolved::expr_variant; +use compiler::util::unresolved::pat_enum; +use compiler::util::unresolved::pat_struct; +use compiler::util::unresolved::pat_unit_struct; +use compiler::util::unresolved::pat_var; +use compiler::util::unresolved::ty; +use compiler::util::unresolved::ty_assoc; +use compiler::util::unresolved::ty_con; + +#[test] +fn test_parser_expr_int0() { + let a = Expr::parse("1"); + let b = expr_int("1"); + assert_eq!(a, b); +} + +#[ignore] +#[test] +fn test_parser_expr_int1() { + let a = Expr::parse("123s"); + let b = expr_call_direct("postfix_s", [], [expr_int("123")]); + assert_eq!(a, b); +} + +#[test] +fn test_parser_expr_float0() { + let a = Expr::parse("1.0"); + let b = expr_float("1.0"); + assert_eq!(a, b); +} + +#[ignore] +#[test] +fn test_parser_expr_float1() { + let a = Expr::parse("1.0s"); + let b = expr_call_direct("postfix_s", [], [expr_float("1.0")]); + assert_eq!(a, b); +} + +#[test] +fn test_parser_expr_binop_add0() { + let a = Expr::parse("1 + 2"); + let b = expr_add(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_sub0() { + let a = Expr::parse("1 - 2"); + let b = expr_sub(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_mul0() { + let a = Expr::parse("1 * 2"); + let b = expr_mul(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_div0() { + let a = Expr::parse("1 / 2"); + let b = expr_div(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_eq0() { + let a = Expr::parse("1 == 2"); + let b = expr_eq(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_ne0() { + let a = Expr::parse("1 != 2"); + let b = expr_ne(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_le0() { + let a = Expr::parse("1 <= 2"); + let b = expr_le(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_ge0() { + let a = Expr::parse("1 >= 2"); + let b = expr_ge(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_lt0() { + let a = Expr::parse("1 < 2"); + let b = expr_lt(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_gt0() { + let a = Expr::parse("1 > 2"); + let b = expr_gt(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_and0() { + let a = Expr::parse("1 and 2"); + let b = expr_and(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_or0() { + let a = Expr::parse("1 or 2"); + let b = expr_or(expr_int("1"), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_add_mul0() { + let a = Expr::parse("1 + 2 * 3"); + let b = expr_add(expr_int("1"), expr_mul(expr_int("2"), expr_int("3"))); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_mul_add0() { + let a = Expr::parse("1 * 2 + 3"); + let b = expr_add(expr_mul(expr_int("1"), expr_int("2")), expr_int("3")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_add_div0() { + let a = Expr::parse("1 + 2 / 3"); + let b = expr_add(expr_int("1"), expr_div(expr_int("2"), expr_int("3"))); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_div_add0() { + let a = Expr::parse("1 / 2 + 3"); + let b = expr_add(expr_div(expr_int("1"), expr_int("2")), expr_int("3")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_mul_div0() { + let a = Expr::parse("1 * 2 / 3"); + let b = expr_div(expr_mul(expr_int("1"), expr_int("2")), expr_int("3")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_add_add0() { + let a = Expr::parse("1 + 2 + 3"); + let b = expr_add(expr_add(expr_int("1"), expr_int("2")), expr_int("3")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_eq_eq0() { + let a = Expr::parse("1 == 2 == 3"); + let b = expr_block( + [ + stmt_var("_0", ty_hole(), expr_int("1")), + stmt_var("_1", ty_hole(), expr_int("2")), + ], + expr_and( + expr_eq(expr_var("_0"), expr_var("_1")), + expr_eq(expr_var("_1"), expr_int("3")), + ), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_eq_eq_eq0() { + let a = Expr::parse("1 == 2 == 3 == 4"); + let b = expr_block( + [ + stmt_var("_0", ty_hole(), expr_int("1")), + stmt_var("_1", ty_hole(), expr_int("2")), + ], + expr_and( + expr_eq(expr_var("_0"), expr_var("_1")), + expr_block( + [stmt_var("_2", ty_hole(), expr_int("3"))], + expr_and( + expr_eq(expr_var("_1"), expr_var("_2")), + expr_eq(expr_var("_2"), expr_int("4")), + ), + ), + ), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_binop_eq_eq_le0() { + let a = Expr::parse("1 == 2 == 3 <= 4"); + let b = expr_block( + [ + stmt_var("_0", ty_hole(), expr_int("1")), + stmt_var("_1", ty_hole(), expr_int("2")), + ], + expr_and( + expr_eq(expr_var("_0"), expr_var("_1")), + expr_block( + [stmt_var("_2", ty_hole(), expr_int("3"))], + expr_and( + expr_eq(expr_var("_1"), expr_var("_2")), + expr_le(expr_var("_2"), expr_int("4")), + ), + ), + ), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_unop_neg0() { + let a = Expr::parse("-1"); + let b = expr_neg(expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_unop_neg_add0() { + let a = Expr::parse("-1 + 2"); + let b = expr_add(expr_neg(expr_int("1")), expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_unop_not0() { + let a = Expr::parse("!1"); + let b = expr_not(expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_call0() { + let a = Expr::parse("x(1)"); + let b = expr_call_direct("x", [], [expr_int("1")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_call1() { + let a = Expr::parse("1(x)"); + let b = expr_call(expr_int("1"), [expr_var("x")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_var0() { + let a = Expr::parse("x"); + let b = expr_var("x"); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_var1() { + let a = Expr::parse("x[i32]"); + let b = expr_def("x", [ty("i32")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_var0() { + let a = Pat::parse("x"); + let b = pat_var("x"); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_enum0() { + let a = Pat::parse("S::V(x)"); + let b = pat_enum("S", [], "V", pat_var("x")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_enum1() { + let a = Pat::parse("S[i32]::V(x)"); + let b = pat_enum("S", [ty("i32")], "V", pat_var("x")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_struct0() { + let a = Pat::parse("S(x=x,y=y)"); + let b = pat_struct("S", [], [("x", pat_var("x")), ("y", pat_var("y"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_struct1() { + let a = Pat::parse("S[i32](x=x,y=y)"); + let b = pat_struct("S", [ty("i32")], [("x", pat_var("x")), ("y", pat_var("y"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_struct2() { + let a = Pat::parse("S[i32]"); + let b = pat_unit_struct("S", [ty("i32")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_struct3() { + let a = Pat::parse("S[]"); + let b = pat_unit_struct("S", []); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_if0() { + let a = Expr::parse("if true { 1 }"); + let b = expr_match( + expr_bool(true), + [(pat_bool(true), expr_int("1")), (pat_wild(), expr_unit())], + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_if1() { + let a = Program::parse("if true { 1 } if false { 2 }"); + let b = program([ + stmt_expr(expr_match( + expr_bool(true), + [(pat_bool(true), expr_int("1")), (pat_wild(), expr_unit())], + )), + stmt_expr(expr_match( + expr_bool(false), + [(pat_bool(true), expr_int("2")), (pat_wild(), expr_unit())], + )), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_if_else0() { + let a = Expr::parse("if true { 1 } else { 2 }"); + let b = expr_match( + expr_bool(true), + [(pat_bool(true), expr_int("1")), (pat_wild(), expr_int("2"))], + ); + assert!(a == b, "{a}\n{b}"); +} + +// #[test] +// fn test_parser_expr_if_else1() { +// let a = Expr::parse("if true { 1; 2 } else { 3; 4 }"); +// let b = expr_if_else( +// expr_bool(true), +// [ +// ( +// pat_bool(true), +// expr_block([stmt_expr(expr_int("1"))], expr_int("2")), +// ), +// ( +// pat_wild(), +// expr_block([stmt_expr(expr_int("3"))], expr_int("4")), +// ), +// ], +// ); +// assert!(a == b, "{a}\n{b}"); +// } + +#[test] +fn test_parser_expr_match0() { + let a = Expr::parse("match 1 { 1 => 2, _ => 3 }"); + let b = expr_match( + expr_int("1"), + [(pat_int("1"), expr_int("2")), (pat_wild(), expr_int("3"))], + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_match1() { + let a = Expr::parse("match x { 1 => 2, _ => 3 }"); + let b = expr_match( + expr_var("x"), + [(pat_int("1"), expr_int("2")), (pat_wild(), expr_int("3"))], + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_method_call0() { + let a = Expr::parse("1.foo()"); + let b = expr_call_direct("foo", [], [expr_int("1")]); + assert!(a == b, "{a}\n{b}"); + let a = Expr::parse("1.foo(2)"); + let b = expr_call_direct("foo", [], [expr_int("1"), expr_int("2")]); + assert!(a == b, "{a}\n{b}"); + let a = Expr::parse("1.foo(2,)"); + let b = expr_call_direct("foo", [], [expr_int("1"), expr_int("2")]); + assert!(a == b, "{a}\n{b}"); + let a = Expr::parse("1.foo(2, 3)"); + let b = expr_call_direct("foo", [], [expr_int("1"), expr_int("2"), expr_int("3")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_method_call1() { + let a = Expr::parse("1.foo[i32]()"); + let b = expr_call_direct("foo", [ty("i32")], [expr_int("1")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def0() { + let a = Stmt::parse("def id(x: i32): i32 = x;"); + let b = stmt_def("id", [], [("x", ty("i32"))], ty("i32"), [], expr_var("x")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def1() { + let a = Stmt::parse("def id(x: i32): i32 { x }"); + let b = stmt_def( + "id", + [], + [("x", ty("i32"))], + ty("i32"), + [], + expr_block([], expr_var("x")), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def2() { + let a = Stmt::parse("def id(x: i32, y: i32): i32 = x;"); + let b = stmt_def( + "id", + [], + [("x", ty("i32")), ("y", ty("i32"))], + ty("i32"), + [], + expr_var("x"), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def3() { + let a = Stmt::parse("def id(x: i32, y: i32): i32 = x + y;"); + let b = stmt_def( + "id", + [], + [("x", ty("i32")), ("y", ty("i32"))], + ty("i32"), + [], + expr_add(expr_var("x"), expr_var("y")), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def4() { + let a = Stmt::parse("def id(x: i32, y: i32): i32 = x + y * 2;"); + let b = stmt_def( + "id", + [], + [("x", ty("i32")), ("y", ty("i32"))], + ty("i32"), + [], + expr_add(expr_var("x"), expr_mul(expr_var("y"), expr_int("2"))), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def5() { + let a = Stmt::parse("def debug(x: i32): i32 { print(x); x }"); + let b = stmt_def( + "debug", + [], + [("x", ty("i32"))], + ty("i32"), + [], + expr_block( + [stmt_expr(expr_call_direct("print", [], [expr_var("x")]))], + expr_var("x"), + ), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def6() { + let a = Stmt::parse("def f(x: i32): i32 = x;"); + let b = stmt_def("f", [], [("x", ty("i32"))], ty("i32"), [], expr_var("x")); + assert_eq!(a, b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def7() { + let a = Stmt::parse("def f(x: i32,): i32 = x;"); + let b = stmt_def("f", [], [("x", ty("i32"))], ty("i32"), [], expr_var("x")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def8() { + let a = Stmt::parse("def f(x: i32, y: i32): i32 = x;"); + let b = stmt_def( + "f", + [], + [("x", ty("i32")), ("y", ty("i32"))], + ty("i32"), + [], + expr_var("x"), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_generics0() { + let a = Stmt::parse("def f[](): i32 = 1;"); + let b = stmt_def("f", [], [], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_generics1() { + let a = Stmt::parse("def f[T](): i32 = 1;"); + let b = stmt_def("f", ["T"], [], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_generics2() { + let a = Stmt::parse("def f[T,](): i32 = 1;"); + let b = stmt_def("f", ["T"], [], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_generics3() { + let a = Stmt::parse("def f[T, U](): i32 = 1;"); + let b = stmt_def("f", ["T", "U"], [], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_where0() { + let a = Stmt::parse("def x(): i32 where = 1;"); + let b = stmt_def("x", [], [], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_where1() { + let a = Stmt::parse("def x(): i32 where Clone[i32] = 1;"); + let b = stmt_def( + "x", + [], + [], + ty("i32"), + [bound("Clone", [ty("i32")])], + expr_int("1"), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_where2() { + let a = Stmt::parse("def x(): i32 where Clone[i32], Copy[i32] = 1;"); + let b = stmt_def( + "x", + [], + [], + ty("i32"), + [bound("Clone", [ty("i32")]), bound("Copy", [ty("i32")])], + expr_int("1"), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_where3() { + let a = Stmt::parse("def x(): i32 where Clone[i32], Copy[i32], = 1;"); + let b = stmt_def( + "x", + [], + [], + ty("i32"), + [bound("Clone", [ty("i32")]), bound("Copy", [ty("i32")])], + expr_int("1"), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_def_where4() { + let a = Stmt::parse("def x(): i32 where { 1 }"); + let b = stmt_def("x", [], [], ty("i32"), [], expr_block([], expr_int("1"))); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_impl_where0() { + let a = Stmt::parse("impl Copy[i32] where Clone[i32] {}"); + let b = stmt_impl( + [], + bound("Copy", [ty("i32")]), + [bound("Clone", [ty("i32")])], + [], + [], + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program0() { + let a = Program::parse( + "def id(x: i32): i32 = x; + def main(): i32 = id(42);", + ); + let b = program([ + stmt_def("id", [], [("x", ty("i32"))], ty("i32"), [], expr_var("x")), + stmt_def( + "main", + [], + [], + ty("i32"), + [], + expr_call_direct("id", [], [expr_int("42")]), + ), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_impl0() { + let a = Stmt::parse( + "impl Eq[bool] { + def eq(x: bool, y: bool): bool = true; + }", + ); + let b = stmt_impl( + [], + bound("Eq", [ty("bool")]), + [], + [stmt_def( + "eq", + [], + [("x", ty("bool")), ("y", ty("bool"))], + ty("bool"), + [], + expr_bool(true), + )], + [], + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_impl1() { + StmtImpl::parse( + "impl[T, R] Add[Vec[T], R] where Add[T, R] { + type Output = Vec[Add[T, R]::Output]; + }", + ); +} + +#[test] +fn test_parser_stmt_var0() { + let a = Stmt::parse("var x = 1;"); + let b = stmt_var("x", ty_hole(), expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_var1() { + let a = Stmt::parse("var x: i32 = 1;"); + let b = stmt_var("x", ty("i32"), expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_var2() { + let a = Program::parse("var x = 1; var y = x;"); + let b = program([ + stmt_var("x", ty_hole(), expr_int("1")), + stmt_var("y", ty_hole(), expr_var("x")), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_assign0() { + let a = Expr::parse("x = 1"); + let b = expr_assign(expr_var("x"), expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_type0() { + let a = Stmt::parse("type T = i32;"); + let b = stmt_type("T", [], ty("i32")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_type1() { + let a = Stmt::parse("type T[U] = U;"); + let b = stmt_type("T", ["U"], ty("U")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_type2() { + let a = Stmt::parse("type T[U] = (U, U);"); + let b = stmt_type("T", ["U"], ty_tuple([ty("U"), ty("U")])); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_struct0() { + let a = Stmt::parse("struct S;"); + let b = stmt_struct("S", [], []); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_struct_err0() { + let a = Stmt::diagnose("struct S"); + assert_eq!( + a, + indoc::indoc! {" + Error: Unexpected end of file + ╭─[test:1:9] + │ + 1 │ struct S + │ │ + │ ╰─ Expected `;` + ───╯"} + ); +} + +#[test] +fn test_parser_stmt_struct1() { + let a = Stmt::parse("struct S();"); + let b = stmt_struct("S", [], []); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_struct2() { + let a = Stmt::parse("struct S(x:i32);"); + let b = stmt_struct("S", [], [("x", ty("i32"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_struct3() { + let a = Stmt::parse("struct S(x:i32);"); + let b = stmt_struct("S", [], [("x", ty("i32"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_struct4() { + let a = Stmt::parse("struct S[T](x:T);"); + let b = stmt_struct("S", ["T"], [("x", ty("T"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_struct0() { + let a = Expr::parse("S(x=1)"); + let b = expr_struct("S", [], [("x", expr_int("1"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_struct1() { + let a = Expr::parse("S(x=x)"); + let b = expr_struct("S", [], [("x", expr_var("x"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_struct2() { + let a = Expr::parse("s.x.y"); + let b = expr_field(expr_field(expr_var("s"), "x"), "y"); + assert!(a == b, "{a}\n{b}"); +} + +// Field punning is done at resolution time. +#[test] +fn test_parser_expr_struct3() { + let a = Expr::parse("S(x=s.x)"); + let b = expr_struct("S", [], [("x", expr_field(expr_var("s"), "x"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_struct5() { + let a = Expr::parse("S[i32](x=1)"); + let b = expr_struct("S", [ty("i32")], [("x", expr_int("1"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_enum0() { + let a = Stmt::parse("enum E { A(i32), B(i32) }"); + let b = stmt_enum("E", [], [("A", ty("i32")), ("B", ty("i32"))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_enum0() { + let a = Expr::parse("E::A"); + let b = expr_unit_variant("E", [], "A"); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_enum1() { + let a = Expr::parse("E::A()"); + let b = expr_variant("E", [], "A", []); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_enum2() { + let a = Expr::parse("E::A(1,)"); + let b = expr_variant("E", [], "A", [expr_int("1")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_enum3() { + let a = Expr::parse("E::A(1, 2)"); + let b = expr_variant("E", [], "A", [expr_int("1"), expr_int("2")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_enum4() { + let a = Expr::parse("E[i32]::A(1, 2)"); + let b = expr_variant("E", [ty("i32")], "A", [expr_int("1"), expr_int("2")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_array0() { + let a = Expr::parse("[1, 2, 3]"); + let b = expr_array([expr_int("1"), expr_int("2"), expr_int("3")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_tuple0() { + let a = Expr::parse("()"); + let b = expr_tuple([]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_tuple1() { + let a = Expr::parse("(1,)"); + let b = expr_tuple([expr_int("1")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_tuple2() { + let a = Expr::parse("(1, 2)"); + let b = expr_tuple([expr_int("1"), expr_int("2")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_tuple3() { + let a = Expr::parse("a.0"); + let b = expr_index(expr_var("a"), index("0")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_tuple0() { + let a = Pat::parse("()"); + let b = pat_tuple([]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_tuple1() { + let a = Pat::parse("(1,)"); + let b = pat_tuple([pat_int("1")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_pat_tuple2() { + let a = Pat::parse("(1, 2)"); + let b = pat_tuple([pat_int("1"), pat_int("2")]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace0() { + let a = Program::parse("{1}"); + let b = program([stmt_expr(expr_block([], expr_int("1")))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace1() { + let a = Program::parse("{1} {2}"); + let b = program([ + stmt_expr(expr_block([], expr_int("1"))), + stmt_expr(expr_block([], expr_int("2"))), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace2() { + let a = Program::parse("{{1}}"); + let b = program([stmt_expr(expr_block([], expr_block([], expr_int("1"))))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace3() { + let a = Program::parse("{{1} {2}}"); + let b = program([stmt_expr(expr_block( + [stmt_expr(expr_block([], expr_int("1")))], + expr_block([], expr_int("2")), + ))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace4() { + let a = Program::parse("{{1};{2}}"); + let b = program([stmt_expr(expr_block( + [stmt_expr(expr_block([], expr_int("1")))], + expr_block([], expr_int("2")), + ))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace5() { + let a = Program::parse("{{1};{2};}"); + let b = program([stmt_expr(expr_block( + [ + stmt_expr(expr_block([], expr_int("1"))), + stmt_expr(expr_block([], expr_int("2"))), + ], + expr_unit(), + ))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace6() { + let a = Program::parse("{;}"); + let b = program([stmt_expr(expr_block([], expr_unit()))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace7() { + let a = Program::parse("{;;;;;;;;}"); + let b = program([stmt_expr(expr_block([], expr_unit()))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_brace8() { + let a = Expr::parse("{1;2}"); + let b = expr_block([stmt_expr(expr_int("1"))], expr_int("2")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_paren0() { + let a = Program::parse("();"); + let b = program([stmt_expr(expr_unit())]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_paren1() { + let a = Program::parse("(());"); + let b = program([stmt_expr(expr_unit())]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_program_paren2() { + let a = Program::parse("({});"); + let b = program([stmt_expr(expr_block([], expr_unit()))]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_assoc0() { + let a = Expr::parse("Iterator[Vec[i32]]::next"); + let b = expr_assoc("Iterator", [ty_con("Vec", [ty("i32")])], "next"); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_type_assoc0() { + let a = Type::parse("Iterator[Vec[i32]]::Item"); + let b = ty_assoc("Iterator", [ty_con("Vec", [ty("i32")])], "Item"); + assert_eq!(a, b); +} + +#[test] +fn test_parser_expr_query0() { + let a = Expr::parse("from x in [1, 2, 3] "); + let b = expr_query([query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )])]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query1() { + let a = Expr::parse( + "from x in source() + select {x=f(), y=g()} + into sink()", + ); + let b = expr_query([ + query_from([("x", expr_call_direct("source", [], []))]), + query_select([ + ("x", expr_call_direct("f", [], [])), + ("y", expr_call_direct("g", [], [])), + ]), + query_into([expr_call_direct("sink", [], [])]), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query2() { + let a = Expr::parse( + "from x in [1, 2, 3] + select {x=1, y=2} + where x > 1", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_select([("x", expr_int("1")), ("y", expr_int("2"))]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query3() { + let a = Expr::parse( + "from x in [1, 2, 3] + select {x=1, y=2} + where x > 1 + select {x=1, y=2}", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_select([("x", expr_int("1")), ("y", expr_int("2"))]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + query_select([("x", expr_int("1")), ("y", expr_int("2"))]), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query4() { + let a = Expr::parse( + "from x in [1, 2, 3] + with y = f(x)", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_with([("y", expr_call_direct("f", [], [expr_var("x")]))]), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query5() { + let a = Expr::parse( + "from x in [1, 2, 3] + group x { + select {x=1, y=2} + with z = f(x) + where x > 1 + }", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_group( + ["x"], + [ + query_select([("x", expr_int("1")), ("y", expr_int("2"))]), + query_with([("z", expr_call_direct("f", [], [expr_var("x")]))]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + ], + ), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query6() { + let a = Expr::parse( + "from x in [1, 2, 3] + group x { + compute total = sum of x + }", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_group( + ["x"], + [query_compute([("total", expr_var("sum"), expr_var("x"))])], + ), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query7() { + let a = Expr::parse( + "from x in [1, 2, 3] + group x { + compute { + total = sum of x, + lowest = min of x, + highest = max of x + } + }", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_group( + ["x"], + [query_compute([ + ("total", expr_var("sum"), expr_var("x")), + ("lowest", expr_var("min"), expr_var("x")), + ("highest", expr_var("max"), expr_var("x")), + ])], + ), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query8() { + let a = Expr::parse( + "from x in [1, 2, 3] + over tumbling(1) { + compute { + total = sum of x, + lowest = min of x, + highest = max of x + } + select {x=1, y=2} + where x > 1 + }", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_over( + expr_call_direct("tumbling", [], [expr_int("1")]), + [ + query_compute([ + ("total", expr_var("sum"), expr_var("x")), + ("lowest", expr_var("min"), expr_var("x")), + ("highest", expr_var("max"), expr_var("x")), + ]), + query_select([("x", expr_int("1")), ("y", expr_int("2"))]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + ], + ), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query9() { + let a = Expr::parse( + "from x in [1, 2, 3] + select x=1, y=2, z=3 + where x > 1", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_select([ + ("x", expr_int("1")), + ("y", expr_int("2")), + ("z", expr_int("3")), + ]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + ]); + assert!(a == b, "{a:?}\n{b:?}"); +} + +#[test] +fn test_parser_expr_query10() { + let a = Expr::parse( + "from x in [1, 2, 3] + select x=1, y=2, z=3 + where x > 1", + ); + let b = expr_query([ + query_from([( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + )]), + query_select([ + ("x", expr_int("1")), + ("y", expr_int("2")), + ("z", expr_int("3")), + ]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + ]); + assert!(a == b, "{a:?}\n{b:?}"); +} + +#[test] +fn test_parser_expr_query11() { + let a = Expr::parse( + "from x in [1, 2, 3], + y in [1, 2, 3] + compute + highest = max of x, + lowest = min of x + select x, y, z=3 + with + x = f(x), + y = g(x) + where x > 1 + into sink()", + ); + let b = expr_query([ + query_from([ + ( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ( + "y", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ]), + query_compute([ + ("highest", expr_var("max"), expr_var("x")), + ("lowest", expr_var("min"), expr_var("x")), + ]), + query_select([ + ("x", expr_var("x")), + ("y", expr_var("y")), + ("z", expr_int("3")), + ]), + query_with([ + ("x", expr_call_direct("f", [], [expr_var("x")])), + ("y", expr_call_direct("g", [], [expr_var("x")])), + ]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + query_into([expr_call_direct("sink", [], [])]), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_query12() { + let a = Expr::parse( + "from x in [1, 2, 3], + y in [1, 2, 3] + group x, y { + select {x=1, y=2} + } + into sink()", + ); + let b = expr_query([ + query_from([ + ( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ( + "y", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ]), + query_group( + ["x", "y"], + [query_select([("x", expr_int("1")), ("y", expr_int("2"))])], + ), + query_into([expr_call_direct("sink", [], [])]), + ]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_stmt_query() { + let a = Stmt::parse( + "from x in [1, 2, 3], + y in [1, 2, 3] + compute + highest = max of x, + lowest = min of x + select x, y, z=3 + with + x = f(x), + y = g(x) + where x > 1 + into sink(), + sink();", + ); + let b = stmt_expr(expr_query([ + query_from([ + ( + "x", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ( + "y", + expr_array([expr_int("1"), expr_int("2"), expr_int("3")]), + ), + ]), + query_compute([ + ("highest", expr_var("max"), expr_var("x")), + ("lowest", expr_var("min"), expr_var("x")), + ]), + query_select([ + ("x", expr_var("x")), + ("y", expr_var("y")), + ("z", expr_int("3")), + ]), + query_with([ + ("x", expr_call_direct("f", [], [expr_var("x")])), + ("y", expr_call_direct("g", [], [expr_var("x")])), + ]), + query_where(expr_gt(expr_var("x"), expr_int("1"))), + query_into([ + expr_call_direct("sink", [], []), + expr_call_direct("sink", [], []), + ]), + ])); + assert_eq!(a, b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_fun0() { + let a = Expr::parse("fun() = 1"); + let b = expr_fun([], expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_fun1() { + let a = Expr::parse("fun(x: i32): i32 = 1"); + let b = expr_fun_typed([("x", ty("i32"))], ty("i32"), expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_fun2() { + let a = Expr::parse("fun(x) = fun(y) = 1"); + let b = expr_fun(["x"], expr_fun(["y"], expr_int("1"))); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_type_fun0() { + let a = Type::parse("fun(i32, i32): i32"); + let b = ty_fun([ty("i32"), ty("i32")], ty("i32")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_type_fun1() { + let a = Type::parse("fun(i32): fun(i32): i32"); + let b = ty_fun([ty("i32")], ty_fun([ty("i32")], ty("i32"))); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_return0() { + let a = Expr::parse("return 1"); + let b = expr_return(expr_int("1")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_return1() { + let a = Expr::parse("return"); + let b = expr_return(expr_unit()); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_continue0() { + let a = Expr::parse("continue"); + let b = expr_continue(); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_break0() { + let a = Expr::parse("break"); + let b = expr_break(); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_unexpected_eof0() { + let a = Stmt::diagnose("def f(x: i32): i32 = 1"); + assert_eq!( + a, + indoc::indoc! {" + Error: Unexpected end of file + ╭─[test:1:23] + │ + 1 │ def f(x: i32): i32 = 1 + │ │ + │ ╰─ Expected `;` + ───╯"} + ); +} + +#[test] +fn test_parser_unexpected_token0() { + let a = Stmt::diagnose("def f(x: i32): i32 = 1 2"); + assert_eq!( + a, + indoc::indoc! {" + Error: Unexpected token `` + ╭─[test:1:24] + │ + 1 │ def f(x: i32): i32 = 1 2 + │ ┬ + │ ╰── Expected `;` + ───╯"} + ); +} + +#[test] +fn test_parser_recover0() { + let a = Stmt::parse("def f(x: i32): i32 = +;"); + let b = stmt_def( + "f", + [], + [("x", ty("i32"))], + ty("i32"), + [], + expr_add(expr_err(), expr_err()), + ); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_recover1() { + let (a, msg) = Stmt::try_parse("def f(x: +): i32 = 1;").unwrap_err(); + let a = a.unwrap(); + let b = stmt_def("f", [], [("x", ty_err())], ty("i32"), [], expr_int("1")); + assert!(a == b, "{a}\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Unexpected token `+` + ╭─[test:1:10] + │ + 1 │ def f(x: +): i32 = 1; + │ ┬ + │ ╰── Expected `)` + ───╯"}, + ) +} + +#[test] +fn test_parser_pat_annotate0() { + let a = Pat::try_parse("1:i32").unwrap(); + let b = pat_int("1").with_ty(ty("i32")); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_parser_expr_annotate0() { + let a = Expr::try_parse("1:i32").unwrap(); + let b = expr_int("1").of(ty("i32")); + assert!(a == b, "{a}\n{b}"); +} + +#[ignore] +#[test] +fn test_parser_depth0() { + let r = format!("{}{}", "{".repeat(1000), "}".repeat(1000)); + let _ = Expr::parse(&r); +} diff --git a/crates/compiler/tests/parser2.rs b/crates/compiler/tests/parser2.rs new file mode 100644 index 0000000..8bc355a --- /dev/null +++ b/crates/compiler/tests/parser2.rs @@ -0,0 +1,26 @@ +use compiler::lexer::Lexer; +use compiler::parser2::Parser; + +#[ignore] +#[test] +fn test0() { + let source = "def f(a:i32): i32 = 1+1*1;"; + let lexer = Lexer::new(0, source); + let _output = Parser::new(source, lexer).parse(Parser::program); +} + +#[ignore] +#[test] +fn test1() { + let source = "def f(a:i32): i32 = 1+1*1;"; + let lexer = Lexer::new(0, source); + let _output = Parser::new(source, lexer).parse(Parser::program); +} + +#[ignore] +#[test] +fn test2() { + let source = "def f(a:i32): i32 = 1+1*1;"; + let lexer = Lexer::new(0, source); + let _output = Parser::new(source, lexer).parse(Parser::program); +} diff --git a/crates/compiler/tests/resolve.rs b/crates/compiler/tests/resolve.rs new file mode 100644 index 0000000..aab7c0e --- /dev/null +++ b/crates/compiler/tests/resolve.rs @@ -0,0 +1,578 @@ +use compiler::ast::Program; +use compiler::util::bound; +use compiler::util::bound_err; +use compiler::util::expr_assoc; +use compiler::util::expr_call; +use compiler::util::expr_def; +use compiler::util::expr_enum; +use compiler::util::expr_err; +use compiler::util::expr_int; +use compiler::util::expr_struct; +use compiler::util::expr_tuple; +use compiler::util::expr_var; +use compiler::util::program; +use compiler::util::stmt_def; +use compiler::util::stmt_enum; +use compiler::util::stmt_expr; +use compiler::util::stmt_impl; +use compiler::util::stmt_struct; +use compiler::util::stmt_trait; +use compiler::util::stmt_type; +use compiler::util::stmt_var; +use compiler::util::tr_def; +use compiler::util::tr_type; +use compiler::util::ty; +use compiler::util::ty_alias; +use compiler::util::ty_assoc; +use compiler::util::ty_con; +use compiler::util::ty_err; +use compiler::util::ty_gen; +use compiler::util::ty_hole; +use compiler::util::ty_tuple; +use compiler::util::types::ty_i32; + +fn diff(a: impl std::fmt::Debug, b: impl std::fmt::Debug) -> String { + let a = format!("{:#?}", a); + let b = format!("{:#?}", b); + let mut output = String::new(); + let diff = similar::TextDiff::from_lines(&a, &b); + for change in diff.iter_all_changes() { + let sign = match change.tag() { + similar::ChangeTag::Delete => "-", + similar::ChangeTag::Insert => "+", + similar::ChangeTag::Equal => " ", + }; + output.push_str(&format!("{}{}", sign, change)); + } + output +} + +macro_rules! ok { + {$s:tt} => { { Program::try_resolve(indoc::indoc! { $s }).unwrap_or_else(|(_, s)| panic!("{}", s)) } } +} + +macro_rules! err { + {$s:tt} => { { Program::try_resolve(indoc::indoc! { $s }).unwrap_err() } } +} + +#[test] +fn test_resolve_var0() { + let a = ok!("var x = 0; x;"); + let b = program([ + stmt_var("x", ty_hole(), expr_int("0")), + stmt_expr(expr_var("x")), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_var_err0() { + let (a, msg) = err!("var x = 0; y;"); + let b = program([ + stmt_var("x", ty_hole(), expr_int("0")), + stmt_expr(expr_err()), + ]); + assert!(a == b, "{a}\n\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Name `y` not found. + ╭─[test:1:12] + │ + 1 │ var x = 0; y; + │ ┬ + │ ╰── Expected expression. + ───╯"}, + "{msg}" + ) +} + +#[test] +fn test_resolve_def0() { + let a = ok!("def f(): i32 = 0; f();"); + let b = program([ + stmt_def("f", [], [], ty_i32(), [], expr_int("0")), + stmt_expr(expr_call(expr_def("f", []), [])), + ]); + assert!(a == b, "{a:?}\n\n{b:?}"); +} + +#[test] +fn test_resolve_def1() { + let a = ok!("def f(x: i32): i32 = x;"); + let b = program([stmt_def( + "f", + [], + [("x", ty_i32())], + ty_i32(), + [], + expr_var("x"), + )]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_def2() { + let a = ok!("def f(x: i32): i32 = f(x);"); + let b = program([stmt_def( + "f", + [], + [("x", ty_i32())], + ty_i32(), + [], + expr_call(expr_def("f", []), [expr_var("x")]), + )]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_def_param1() { + let (a, msg) = err!("def f(): i32 = x;"); + let b = program([stmt_def("f", [], [], ty_i32(), [], expr_err())]); + assert!(a == b, "{a}\n\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Name `x` not found. + ╭─[test:1:16] + │ + 1 │ def f(): i32 = x; + │ ┬ + │ ╰── Expected expression. + ───╯"} + ) +} + +#[test] +fn test_resolve_def_generic() { + let a = ok!("def f[T](x: T): T = x;"); + let b = program([stmt_def( + "f", + ["T"], + [("x", ty_gen("T"))], + ty_gen("T"), + [], + expr_var("x"), + )]); + assert!(a == b, "{a}\n{b}"); +} + +#[test] +fn test_resolve_type0() { + let a = ok!("type T = i32; + var x: T = 0;"); + let b = program([ + stmt_type("T", [], ty_i32()), + stmt_var("x", ty_alias("T", []), expr_int("0")), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_type1() { + let a = ok!("type T[U] = (i32, U); + var x: T[i32] = (0, 0);"); + let b = program([ + stmt_type("T", ["U"], ty_tuple([ty_i32(), ty_gen("U")])), + stmt_var( + "x", + ty_alias("T", [ty_i32()]), + expr_tuple([expr_int("0"), expr_int("0")]), + ), + ]); + assert!(a == b, "{}", diff(&a, &b)); +} + +#[test] +fn test_resolve_type2() { + let (a, msg) = err!( + "type T[U] = (i32, U); + var x: T[i32, i32] = (0, 0);" + ); + let b = program([ + stmt_type("T", ["U"], ty_tuple([ty_i32(), ty_gen("U")])), + stmt_var("x", ty_err(), expr_tuple([expr_int("0"), expr_int("0")])), + ]); + assert!(a == b, "{a}\n\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Wrong number of type arguments. Found 2, expected 1 + ╭─[test:2:8] + │ + 2 │ var x: T[i32, i32] = (0, 0); + │ ┬ + │ ╰── Expected 1 arguments. + ───╯"} + ); +} + +#[test] +fn test_resolve_trait0() { + let a = ok!("trait Trait[T] { + def f(x:T): T; + }"); + let b = program([stmt_trait( + "Trait", + ["T"], + [], + [tr_def("f", [], [("x", ty_gen("T"))], [], ty_gen("T"))], + [], + )]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_trait_assoc0() { + let a = ok!("trait Trait[T] { + def f(x:T): T; + } + def g[T](x:T): T where Trait[T] = f(x);"); + let b = program([ + stmt_trait( + "Trait", + ["T"], + [], + [tr_def("f", [], [("x", ty_gen("T"))], [], ty_gen("T"))], + [], + ), + stmt_def( + "g", + ["T"], + [("x", ty_gen("T"))], + ty_gen("T"), + [bound("Trait", [ty_gen("T")])], + expr_call(expr_assoc("Trait", [ty_hole()], "f", []), [expr_var("x")]), + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_trait_impl0() { + let a = ok!("trait Trait[T] { + def f(x:T): T; + } + impl Trait[i32] { + def f(x:i32): i32 = x; + }"); + let b = program([ + stmt_trait( + "Trait", + ["T"], + [], + [tr_def("f", [], [("x", ty_gen("T"))], [], ty_gen("T"))], + [], + ), + stmt_impl( + [], + bound("Trait", [ty_i32()]), + [], + [stmt_def( + "f", + [], + [("x", ty_i32())], + ty_i32(), + [], + expr_var("x"), + )], + [], + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[ignore] +#[test] +fn test_resolve_trait_impl1() { + let a = ok!("trait Trait[T] { + type A[U]; + } + impl Trait[i32] { + type A[U] = U; + }"); + let b = program([ + stmt_trait("Trait", ["T"], [], [], [tr_type("f", [])]), + stmt_impl( + [], + bound("Trait", [ty_i32()]), + [], + [], + [stmt_type("A", ["U"], ty_gen("U"))], + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_trait_impl2() { + let (a, msg) = err!( + "trait Trait[T] { + def f(x: T): T; + } + impl Trait[i32] { + def g(x: i32): i32 = x; + }" + ); + let b = program([ + stmt_trait( + "Trait", + ["T"], + [], + [tr_def("f", [], [("x", ty_gen("T"))], [], ty_gen("T"))], + [], + ), + stmt_impl( + [], + bound_err(), + [], + [stmt_def( + "g", + [], + [("x", ty_i32())], + ty_i32(), + [], + expr_var("x"), + )], + [], + ), + ]); + assert!(a == b, "{a}\n\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Wrong defs implemented for Trait. Found { `g` }, expected { `f` } + ╭─[test:4:6] + │ + 4 │ impl Trait[i32] { + │ ──┬── + │ ╰──── Expected { `f` }. + ───╯"} + ); +} + +#[test] +fn test_resolve_struct0() { + let a = ok!("struct S[T](x:T);"); + let b = program([stmt_struct("S", ["T"], [("x", ty_gen("T"))])]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_struct1() { + let a = ok!("struct S[T](x:T); + var s: S[i32] = S[i32](x=0);"); + let b = program([ + stmt_struct("S", ["T"], [("x", ty_gen("T"))]), + stmt_var( + "s", + ty_con("S", [ty_i32()]), + expr_struct("S", [ty_i32()], [("x", expr_int("0"))]), + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_struct2() { + let (a, msg) = err!( + "struct S(x:i32); + S(y=0);" + ); + let b = program([ + stmt_struct("S", [], [("x", ty_i32())]), + stmt_expr(expr_err()), + ]); + assert!(a == b, "{a}\n\n{b}"); + assert_eq!( + msg, + indoc::indoc! {" + Error: Wrong fields provided. Found S(y), expected S(x) + ╭─[test:2:1] + │ + 2 │ S(y=0); + │ ┬ + │ ╰── Expected S(x) fields. + ───╯"} + ); +} + +#[test] +fn test_resolve_struct3() { + let a = ok!("struct S; + var s: S = S;"); + let b = program([ + stmt_struct("S", [], []), + stmt_var("s", ty("S"), expr_struct("S", [], [])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_struct4() { + let a = ok!("struct S[T](x:T); + var s = S(x=0);"); + let b = program([ + stmt_struct("S", ["T"], [("x", ty_gen("T"))]), + stmt_var( + "s", + ty_hole(), + expr_struct("S", [ty_hole()], [("x", expr_int("0"))]), + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_enum0() { + let a = ok!("enum E[T] { A(T) }"); + let b = program([stmt_enum("E", ["T"], [("A", ty_gen("T"))])]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_enum1() { + let a = ok!("enum E[T] { A(T) } + var e: E[i32] = E[i32]::A(0);"); + let b = program([ + stmt_enum("E", ["T"], [("A", ty_gen("T"))]), + stmt_var( + "e", + ty_con("E", [ty_i32()]), + expr_enum("E", [ty_i32()], "A", expr_int("0")), + ), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_unordered0() { + let a = ok!("def f(): i32 = g(); + def g(): i32 = 0;"); + let b = program([ + stmt_def("f", [], [], ty_i32(), [], expr_call(expr_def("g", []), [])), + stmt_def("g", [], [], ty_i32(), [], expr_int("0")), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_unordered1() { + let a = ok!("def f(): i32 = g(); + def g(): i32 = f();"); + let b = program([ + stmt_def("f", [], [], ty_i32(), [], expr_call(expr_def("g", []), [])), + stmt_def("g", [], [], ty_i32(), [], expr_call(expr_def("f", []), [])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_unordered2() { + let a = ok!("type A = B; + type B = A;"); + let b = program([ + stmt_type("A", [], ty_alias("B", [])), + stmt_type("B", [], ty_alias("A", [])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_expr_assoc0() { + let a = ok!("trait Trait { + def f(x: i32): i32; + } + Trait::f(0);"); + let b = program([ + stmt_trait( + "Trait", + [], + [], + [tr_def("f", [], [("x", ty_i32())], [], ty_i32())], + [], + ), + stmt_expr(expr_call(expr_assoc("Trait", [], "f", []), [expr_int("0")])), + ]); + assert!(a == b, "{}", diff(&a, &b)); +} + +#[test] +fn test_resolve_expr_assoc1() { + let a = ok!("trait Trait { + def f(x: i32): i32; + } + f(0);"); + let b = program([ + stmt_trait( + "Trait", + [], + [], + [tr_def("f", [], [("x", ty_i32())], [], ty_i32())], + [], + ), + stmt_expr(expr_call(expr_assoc("Trait", [], "f", []), [expr_int("0")])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_expr_assoc2() { + let a = ok!("trait Trait[A] { + def f(x: A): A; + } + Trait[i32]::f(0);"); + let b = program([ + stmt_trait( + "Trait", + ["A"], + [], + [tr_def("f", [], [("x", ty_gen("A"))], [], ty_gen("A"))], + [], + ), + stmt_expr(expr_call( + expr_assoc("Trait", [ty_i32()], "f", []), + [expr_int("0")], + )), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_type_assoc0() { + let a = ok!("trait Trait { + type A; + } + type B = Trait::A;"); + let b = program([ + stmt_trait("Trait", [], [], [], [tr_type("A", [])]), + stmt_type("B", [], ty_assoc("Trait", [], "A", [])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_type_assoc1() { + let a = ok!("trait Trait[T] { + type A; + } + type B = Trait[i32]::A;"); + let b = program([ + stmt_trait("Trait", ["T"], [], [], [tr_type("A", [])]), + stmt_type("B", [], ty_assoc("Trait", [ty_i32()], "A", [])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} + +#[test] +fn test_resolve_type_assoc2() { + let a = ok!("trait Trait[T] { + type A[U]; + } + type B = Trait[i32]::A[i32];"); + let b = program([ + stmt_trait("Trait", ["T"], [], [], [tr_type("A", ["U"])]), + stmt_type("B", [], ty_assoc("Trait", [ty_i32()], "A", [ty_i32()])), + ]); + assert!(a == b, "{a}\n\n{b}"); +} diff --git a/crates/compiler/tests/ser.rs b/crates/compiler/tests/ser.rs new file mode 100644 index 0000000..288be87 --- /dev/null +++ b/crates/compiler/tests/ser.rs @@ -0,0 +1,207 @@ +use std::rc::Rc; + +use serde::de::DeserializeSeed; + +use compiler::ast::Type; +use compiler::builtins::Array; +use compiler::builtins::Record; +use compiler::builtins::Tuple; +use compiler::builtins::Value; + +use compiler::builtins::de::Seed; + +#[test] +fn test_serde_i32() { + let v0 = Value::from(1); + let s = serde_json::to_string(&v0).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t = Type::Cons("i32".into(), vec![]); + let v1 = Seed(t).deserialize(&mut de).unwrap(); + assert_eq!(v0, v1); + assert_eq!(s, "1"); +} + +#[test] +fn test_serde_vec() { + let v0 = Value::from(1); + let v1 = Value::from(2); + let v2 = Value::from(3); + let v3 = Value::from(runtime::builtins::vec::Vec::from(vec![v0, v1, v2])); + let s = serde_json::to_string(&v3).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Vec".into(), vec![t0]); + let v4 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v3, v4); + assert_eq!(s, "[1,2,3]"); +} + +#[test] +fn test_serde_tuple() { + let v0 = Value::from(1); + let v1 = Value::from(2); + let v2 = Value::from(runtime::builtins::im_string::String::from("Hello")); + let v3 = Value::from(Tuple::new(vec![v0, v1, v2])); + let s = serde_json::to_string(&v3).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("i32".into(), vec![]); + let t2 = Type::Cons("String".into(), vec![]); + let t3 = Type::Tuple(vec![t0, t1, t2]); + let v4 = Seed(t3).deserialize(&mut de).unwrap(); + assert_eq!(v3, v4); + assert_eq!(s, r#"[1,2,"Hello"]"#); +} + +#[test] +fn test_serde_record() { + let v0 = Value::from(1); + let v1 = Value::from(runtime::builtins::im_string::String::from("Hello")); + let v2 = Value::from(Record::new(vec![ + ("a".into(), v0.clone()), + ("b".into(), v1.clone()), + ])); + let v2_permut = Value::from(Record::new(vec![("b".into(), v1), ("a".into(), v0)])); + let s = serde_json::to_string(&v2).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("String".into(), vec![]); + let t2 = Type::Record(vec![("a".into(), t0), ("b".into(), t1)]); + let v3 = Seed(t2).deserialize(&mut de).unwrap(); + assert!(v2 == v3 || v2_permut == v3); + assert!((s == r#"{"a":1,"b":"Hello"}"#) || (s == r#"{"b":"Hello","a":1}"#)); +} + +#[test] +fn test_serde_dict() { + let k0 = Value::from(runtime::builtins::im_string::String::from("a")); + let k1 = Value::from(runtime::builtins::im_string::String::from("b")); + let v0 = Value::from(1); + let v1 = Value::from(2); + let v2 = Value::from(runtime::builtins::dict::Dict::from( + vec![(k0, v0), (k1, v1)] + .into_iter() + .collect::>(), + )); + let s = serde_json::to_string(&v2).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("String".into(), vec![]); + let t1 = Type::Cons("i32".into(), vec![]); + let t2 = Type::Cons("Dict".into(), vec![t0, t1]); + let v3 = Seed(t2).deserialize(&mut de).unwrap(); + assert_eq!(v2, v3); + assert!((s == r#"{"a":1,"b":2}"#) || (s == r#"{"b":2,"a":1}"#)); +} + +#[test] +fn test_serde_array() { + let v0 = Value::from(1); + let v1 = Value::from(2); + let v2 = Value::from(3); + let v3 = Value::from(Array(vec![v0, v1, v2])); + let s = serde_json::to_string(&v3).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Array(Rc::new(t0), Some(3)); + let v4 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v3, v4); + assert_eq!(s, "[1,2,3]"); +} + +#[test] +fn test_serde_set() { + let v0 = Value::from(1); + let v1 = Value::from(2); + let v2 = Value::from(runtime::builtins::set::Set::from( + vec![v0, v1] + .into_iter() + .collect::>(), + )); + let s = serde_json::to_string(&v2).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Set".into(), vec![t0]); + let v3 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v2, v3); + assert!((s == r#"[1,2]"#) || (s == r#"[2,1]"#)); +} + +#[test] +fn test_serde_option_some() { + let v0 = Value::from(1); + let v1 = Value::from(runtime::builtins::option::Option::some(Rc::new(v0))); + let s = serde_json::to_string(&v1).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Option".into(), vec![t0]); + let v2 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v1, v2); + assert_eq!(s, "1"); +} + +#[test] +fn test_serde_option_none() { + let v0 = Value::from(runtime::builtins::option::Option::none()); + let s = serde_json::to_string(&v0).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Option".into(), vec![t0]); + let v2 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v0, v2); + assert_eq!(s, "null"); +} + +#[test] +fn test_serde_result_ok() { + let v0 = Value::from(1); + let v1 = Value::from(runtime::builtins::result::Result::ok(Rc::new(v0))); + let s = serde_json::to_string(&v1).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Result".into(), vec![t0]); + let v2 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v1, v2); + assert_eq!(s, r#"{"Ok":1}"#); +} + +#[test] +fn test_serde_result_err() { + let v0 = runtime::builtins::string::String::from("Hello"); + let v1 = Value::from(runtime::builtins::result::Result::error(v0)); + let s = serde_json::to_string(&v1).unwrap(); + let mut de = serde_json::Deserializer::from_str(&s); + let t0 = Type::Cons("i32".into(), vec![]); + let t1 = Type::Cons("Result".into(), vec![t0]); + let v2 = Seed(t1).deserialize(&mut de).unwrap(); + assert_eq!(v1, v2); + assert_eq!(s, r#"{"Err":"Hello"}"#); +} + +// #[test] +// fn test_serde_matrix() { +// use compiler::builtins::Matrix; +// let v9 = Value::from(Matrix::I32(runtime::builtins::matrix::Matrix::zeros( +// vec![2, 2].into(), +// ))); +// let s = serde_json::to_string(&v9).unwrap(); +// let mut de = serde_json::Deserializer::from_str(&s); +// let t0 = Type::Cons("i32".into(), vec![]); +// let t1 = Type::Cons("Matrix".into(), vec![t0]); +// let v10 = Seed(t1).deserialize(&mut de).unwrap(); +// assert_eq!(v9, v10); +// assert_eq!(s, r#"{"v":1,"dim":[2,2],"data":[0,0,0,0]}"#); +// } + +#[test] +fn test_serde_type_variable() { + let mut de = serde_json::Deserializer::from_str("1"); + let t = Type::Var("a".into()); + assert!(Seed(t).deserialize(&mut de).is_err()); +} + +#[test] +fn test_serde_type_error() { + let mut de = serde_json::Deserializer::from_str("1.0"); + let t = Type::Cons("i32".into(), vec![]); + assert!(Seed(t).deserialize(&mut de).is_err()); +} diff --git a/crates/compiler/tests/source.rs b/crates/compiler/tests/source.rs new file mode 100644 index 0000000..6968450 --- /dev/null +++ b/crates/compiler/tests/source.rs @@ -0,0 +1,6 @@ +#[test] +fn test_source0() { + let mut sources = compiler::diag::Sources::new(); + assert_eq!(sources.add("file0", "val x = 0;"), 0); + assert_eq!(sources.add("file1", "def f() = 1;"), 1); +} diff --git a/crates/compiler/tests/traits.rs b/crates/compiler/tests/traits.rs new file mode 100644 index 0000000..13daa40 --- /dev/null +++ b/crates/compiler/tests/traits.rs @@ -0,0 +1,242 @@ +use compiler::ast::Bound; +use compiler::ast::StmtImpl; +use compiler::infer::Context; +use compiler::infer::solve; +use compiler::infer::unify; +use compiler::util::traits::impl_add; +use compiler::util::traits::impl_clone; +use compiler::util::traits::impl_intoiterator; +use compiler::util::traits::impl_iterator; +use compiler::util::traits::tr_add; +use compiler::util::traits::tr_clone; +use compiler::util::traits::tr_intoiterator; +use compiler::util::traits::tr_iterator; +use compiler::util::traits::ty_add_output; +use compiler::util::traits::ty_intoiterator_intoiter; +use compiler::util::traits::ty_iterator_item; +use compiler::util::ty; +use compiler::util::ty_con; +use compiler::util::ty_gen; +use compiler::util::types::ty_i32; +use compiler::util::types::ty_i64; +use compiler::util::types::ty_stream; +use compiler::util::types::ty_vec; + +fn debug(impls: &[StmtImpl], goal: &Bound) { + println!("impls:"); + for i in impls { + println!(" {}", i); + } + println!("goal: {}", goal); +} + +// impl[T] Clone[Vec[T]] where Clone[T] {} +// Goal: Clone[Vec[i32]] +#[test] +fn test_trait1() { + let impls = [impl_clone(["T"], ty_gen("T"), [])]; + let mut sub = vec![]; + let goal = tr_clone(ty_i32()); + let mut ctx = Context::new(); + + debug(&impls, &goal); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); +} + +// impl Clone[i32] {} +// Goal: Clone[i32] +#[test] +fn test_trait2() { + let impls = [impl_clone([], ty_i32(), [])]; + let mut sub = vec![]; + + let goal = tr_clone(ty_i32()); + let mut ctx = Context::new(); + + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); +} + +// impl[T] Clone[Vec[T]] where Clone[T] {} +// impl Clone[i32] {} +// Goal: Clone[Vec[i32]] +#[test] +fn test_trait3() { + let impls = [ + impl_clone(["T"], ty_vec(ty_gen("T")), [tr_clone(ty_gen("T"))]), + impl_clone([], ty_i32(), []), + ]; + let mut sub = vec![]; + + let goal = tr_clone(ty_vec(ty_i32())); + let mut ctx = Context::new(); + + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); +} + +// impl[T] Clone[Vec[T]] where Clone[T] {} +// impl Clone[i32] {} +// Goal: Clone[Vec[Vec[i32]]] +#[test] +fn test_trait4() { + let impls = [ + impl_clone(["T"], ty_vec(ty_gen("T")), [tr_clone(ty_gen("T"))]), + impl_clone([], ty_i32(), []), + ]; + + let mut sub = vec![]; + let goal = tr_clone(ty_vec(ty_vec(ty_i32()))); + + let mut ctx = Context::new(); + + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); +} + +// impl[T] Iterator[Vec[?T]] { type Item = T; } +// Goal: Iterator[Vec[i32], Item = ?A] +// Unify: i32 and Iterator[Vec[i32]]::Item +#[ignore] +#[test] +fn test_trait5() { + let impls = [impl_iterator(["T"], ty_vec(ty_gen("T")), ty_gen("T"), [])]; + let mut sub = vec![]; + let goal = tr_iterator(ty_vec(ty_i32())); + let mut ctx = Context::new(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); + let t0 = ty_iterator_item(ty_vec(ty_i32())); + let t1 = ty_i32(); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +// impl Add[i32, i32] { type Output = i32; } +// impl Add[f32, f32] { type Output = f32; } +// Goal: Add[i32, i32, Output = ?X] +#[ignore] +#[test] +fn test_trait6() { + let impls = [ + impl_add([], [ty_i32(), ty_i32()], ty_i32(), []), + impl_add([], [ty("f32"), ty("f32")], ty("f32"), []), + ]; + let mut sub = vec![]; + let goal = tr_add([ty_i32(), ty_i32()]); + let mut ctx = Context::new(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); + let t0 = ty_add_output([ty_i32(), ty_i32()]); + let t1 = ty_i32(); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +// impl Add[i32, i32] { type Output = i32; } +// impl[T, R] Add[Vec[?T], ?R] where Add[?T, ?R] { +// type Output = Vec[Add[?T, ?R]::Output]; +// } +// Goal: Add[Vec[i32], i32, Output = ?Y] +// Unify: Vec[i32] and Add[Vec[i32], i32]::Output +#[ignore] +#[test] +fn test_trait7() { + let impls = [ + impl_add([], [ty_i32(), ty_i32()], ty_i32(), []), + impl_add( + ["T", "R"], + [ty_vec(ty_gen("T")), ty_gen("R")], + ty_vec(ty_add_output([ty_gen("T"), ty_gen("R")])), + [tr_add([ty_gen("T"), ty_gen("R")])], + ), + ]; + let mut sub = vec![]; + let goal = tr_add([ty_vec(ty_i32()), ty_i32()]); + let mut ctx = Context::new(); + let impls = impls + .into_iter() + .map(|i| i.annotate(&mut ctx)) + .collect::>(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); + let t0 = ty_add_output([ty_vec(ty_i32()), ty_i32()]); + let t1 = ty_vec(ty_i32()); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +// impl Add[i32, i32] { type Output = i32; } +// impl Add[i64, i32] { type Output = i64; } +// Goal: Add[i64, i32, Output = ?X] +// Unify: i64 and Add[i64, i32]::Output +#[ignore] +#[test] +fn test_trait8() { + let impls = [ + impl_add([], [ty_i32(), ty_i32()], ty_i32(), []), + impl_add([], [ty_i64(), ty_i32()], ty_i64(), []), + ]; + let mut sub = vec![]; + let goal = tr_add([ty_i64(), ty_i32()]); + let mut ctx = Context::new(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); + let t0 = ty_add_output([ty_i64(), ty_i32()]); + let t1 = ty_i64(); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +// impl[T] IntoIterator[Vec[?T]] { +// type Item = ?T; +// type IntoIter = VecIterator[?T]; +// } +// impl[T] Iterator[VecIterator[?T]] { +// type Item = ?T; +// } +// Goal: IntoIterator[Vec[i32], Item = ?A, IntoIter = ?B] +// Unify: VecIterator[i32] and Vec[i32]::IntoIter +#[ignore] +#[test] +fn test_trait9() { + let impls = [ + impl_intoiterator( + ["T"], + ty_vec(ty_gen("T")), + ty_gen("T"), + ty_con("VecIterator", [ty_gen("T")]), + [], + ), + impl_iterator(["T"], ty_con("VecIterator", [ty_gen("T")]), ty_gen("T"), []), + ]; + let mut sub = vec![]; + let goal = tr_intoiterator(ty_vec(ty_i32())); + let mut ctx = Context::new(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); + let t0 = ty_intoiterator_intoiter(ty_vec(ty_i32())); + let t1 = ty_con("VecIterator", [ty_i32()]); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +// impl[T] IntoIterator[Vec[?T]] { +// type Item = ?T; +// type IntoIter = VecIterator[?T]; +// } +// impl IntoIterator[Stream[?T]] { +// type Item = ?T; +// type IntoIter = Stream[?T]; +// } +#[test] +fn test_trait10() { + let impls = [ + impl_intoiterator( + ["T"], + ty_vec(ty_gen("T")), + ty_gen("T"), + ty_con("VecIterator", [ty_gen("T")]), + [] + ), + impl_intoiterator( + ["T"], + ty_stream(ty_gen("T")), + ty_gen("T"), + ty_stream(ty_gen("T")), + [] + ), + ]; + + let mut sub = vec![]; + let goal = tr_intoiterator(ty_vec(ty_i32())); + let mut ctx = Context::new(); + assert!(solve(&goal, &impls, &[], &mut sub, &mut ctx).is_some()); +} diff --git a/crates/compiler/tests/unify.rs b/crates/compiler/tests/unify.rs new file mode 100644 index 0000000..2d6f699 --- /dev/null +++ b/crates/compiler/tests/unify.rs @@ -0,0 +1,97 @@ +use compiler::infer::unify; +use compiler::util::ty; +use compiler::util::ty_con; +use compiler::util::ty_var; + +#[test] +fn test_unify_atom0() { + let mut sub = vec![]; + let t0 = ty("i32"); + let t1 = ty("i32"); + assert!(unify(&mut sub, &t0, &t1).is_ok()); + assert!(sub.is_empty()); +} + +#[test] +fn test_unify_atom1() { + let mut sub = vec![]; + let t0 = ty("i32"); + let t1 = ty("i64"); + assert_eq!(unify(&mut sub, &t0, &t1), Err((ty("i32"), ty("i64")))); + assert!(sub.is_empty()); +} + +#[test] +fn test_unify_var0() { + let mut sub = vec![]; + let t0 = ty_var("?T"); + let t1 = ty("i32"); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_var1() { + let mut sub = vec![]; + let t0 = ty("i32"); + let t1 = ty_var("?T"); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_var2() { + let mut sub = vec![]; + let t0 = ty_var("?T"); + let t1 = ty_var("?U"); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_var3() { + let mut sub = vec![("T".into(), ty("i32")), ("U".into(), ty("i32"))]; + let t0 = ty_var("?T"); + let t1 = ty_var("?U"); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_tc0() { + let mut sub = vec![("T".into(), ty("i32"))]; + let t0 = ty_con("Vec", [ty_var("?T")]); + let t1 = ty_con("Vec", [ty("i32")]); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_tc1() { + let mut sub = Vec::new(); + let t0 = ty_con("Vec", [ty_var("?T")]); + let t1 = ty_con("Vec", [ty_var("?U")]); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_tc2() { + let mut sub = vec![("T".into(), ty("i32"))]; + let t0 = ty_con("Vec", [ty_con("Vec", [ty_var("?T")])]); + let t1 = ty_con("Vec", [ty_con("Vec", [ty_var("?U")])]); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_tc3() { + let mut sub = vec![("T".into(), ty_con("Vec", [ty("i32")]))]; + let t0 = ty_con("Vec", [ty_var("?T")]); + let t1 = ty_con("Vec", [ty_con("Vec", [ty("i32")])]); + assert!(unify(&mut sub, &t0, &t1).is_ok()); +} + +#[test] +fn test_unify_tc4() { + let mut sub = vec![("?T".into(), ty("i32"))]; + let t0 = ty_con("Vec", [ty_var("?T")]); + let t1 = ty_con("Vec", [ty("i64")]); + assert_eq!( + unify(&mut sub, &t0, &t1), + Err((ty_con("Vec", [ty("i32")]), t1)) + ); +} diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml new file mode 100644 index 0000000..8151764 --- /dev/null +++ b/crates/config/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "config" +version.workspace = true +edition.workspace = true + +[features] +parse = ["clap"] + +[dependencies] +clap = { version = "4.4.16", features = ["derive", "string"], optional = true } diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs new file mode 100644 index 0000000..19e8b00 --- /dev/null +++ b/crates/config/src/lib.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; + +#[cfg(feature = "clap")] +fn history() -> std::ffi::OsString { + std::env::temp_dir() + .join("aqua") + .join("history.txt") + .into_os_string() +} + +#[derive(Debug, Default, Clone)] +#[cfg_attr(feature = "clap", derive(clap::Parser))] +pub struct Config { + /// Read source from file + pub file: Option, + /// Loads file statement-by-statement into the REPL. + #[cfg_attr(feature = "clap", clap(long))] + pub interactive: bool, + /// Print version + #[cfg_attr(feature = "clap", clap(long))] + pub version: bool, + #[cfg_attr(feature = "clap", clap(long, default_value = history()))] + pub history: PathBuf, +} + +#[cfg(feature = "clap")] +impl Config { + pub fn parse() -> Self { + ::parse() + } +} diff --git a/crates/macros/.DS_Store b/crates/macros/.DS_Store new file mode 100644 index 0000000..9a874b5 Binary files /dev/null and b/crates/macros/.DS_Store differ diff --git a/crates/macros/Cargo.lock b/crates/macros/Cargo.lock new file mode 100644 index 0000000..5322324 --- /dev/null +++ b/crates/macros/Cargo.lock @@ -0,0 +1,47 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "macros" +version = "0.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/crates/macros/Cargo.toml b/crates/macros/Cargo.toml new file mode 100644 index 0000000..2c93549 --- /dev/null +++ b/crates/macros/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "macros" +version.workspace = true +edition.workspace = true + +[lib] +proc-macro = true + +[dependencies] +quote = "1.0.35" +syn = "2.0.48" +proc-macro2 = "1.0.78" diff --git a/crates/macros/src/.DS_Store b/crates/macros/src/.DS_Store new file mode 100644 index 0000000..951b1d6 Binary files /dev/null and b/crates/macros/src/.DS_Store differ diff --git a/crates/macros/src/lib.rs b/crates/macros/src/lib.rs new file mode 100644 index 0000000..de7c196 --- /dev/null +++ b/crates/macros/src/lib.rs @@ -0,0 +1,47 @@ +use proc_macro::TokenStream; + +mod proc_macro_attrs; +mod proc_macro_derives; +mod proc_macros; +pub(crate) mod utils; + +#[proc_macro_derive(Send)] +pub fn derive_send(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_send(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +#[proc_macro_derive(Sync)] +pub fn derive_sync(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_sync(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +#[proc_macro_derive(Unpin)] +pub fn derive_unpin(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_unpin(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +#[proc_macro_derive(DeepClone)] +pub fn derive_deep_clone(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_deep_clone(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +#[proc_macro_derive(Timestamp, attributes(timestamp))] +pub fn derive_extract_timestamp(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_extract_timestamp(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +#[proc_macro_derive(New)] +pub fn derive_new(input: TokenStream) -> TokenStream { + proc_macro_derives::derive_new(syn::parse_macro_input!(input as syn::DeriveInput)) +} + +/// Unwraps a value out of an enum-variant. Panics if it's the wrong variant. +#[proc_macro] +pub fn unwrap(input: TokenStream) -> TokenStream { + proc_macros::unwrap(input) +} + +#[proc_macro_attribute] +pub fn data(_attr: TokenStream, input: TokenStream) -> TokenStream { + proc_macro_attrs::data(syn::parse_macro_input!(input as syn::DeriveInput)) +} diff --git a/crates/macros/src/proc_macro_attrs.rs b/crates/macros/src/proc_macro_attrs.rs new file mode 100644 index 0000000..5bf1754 --- /dev/null +++ b/crates/macros/src/proc_macro_attrs.rs @@ -0,0 +1,12 @@ +use proc_macro as pm; + +#[allow(unused)] +pub(crate) fn data(mut item: syn::DeriveInput) -> pm::TokenStream { + quote::quote! { + #[derive(Debug, Clone, Send, DeepClone, serde::Serialize, serde::Deserialize, Timestamp, New)] + #[serde(crate = "runtime::prelude::serde")] + // #[serde(bound(deserialize = ""))] + #item + } + .into() +} diff --git a/crates/macros/src/proc_macro_attrs/.DS_Store b/crates/macros/src/proc_macro_attrs/.DS_Store new file mode 100644 index 0000000..e7febe5 Binary files /dev/null and b/crates/macros/src/proc_macro_attrs/.DS_Store differ diff --git a/crates/macros/src/proc_macro_attrs/export/functions.rs b/crates/macros/src/proc_macro_attrs/export/functions.rs new file mode 100644 index 0000000..7a72869 --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/export/functions.rs @@ -0,0 +1,33 @@ +use proc_macro as pm; +use quote::quote; + +pub(crate) fn export(_attr: syn::AttributeArgs, item: syn::ItemFn) -> pm::TokenStream { + let mut inputs = item.sig.inputs.clone().into_iter().collect::>(); + let fn_name = &item.sig.ident; + let name = crate::utils::new_id(format!("export_{}", fn_name)); + let output = &item.sig.output; + let (impl_generics, _, where_clause) = item.sig.generics.split_for_impl(); + let (ids, tys): (Vec<_>, Vec<_>) = inputs + .iter() + .map(|i| match i { + syn::FnArg::Receiver(_) => unreachable!(), + syn::FnArg::Typed(i) => (&i.pat, &i.ty), + }) + .unzip(); + if item.sig.asyncness.is_some() { + quote! { + #item + pub async fn #name #impl_generics ((#(#ids,)*):(#(#tys,)*)) #output #where_clause { + #fn_name(#(#ids,)*).await + } + } + } else { + quote! { + #item + pub fn #name #impl_generics ((#(#ids,)*):(#(#tys,)*)) #output #where_clause { + #fn_name(#(#ids,)*) + } + } + } + .into() +} diff --git a/crates/macros/src/proc_macro_attrs/export/impls.rs b/crates/macros/src/proc_macro_attrs/export/impls.rs new file mode 100644 index 0000000..832937f --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/export/impls.rs @@ -0,0 +1,67 @@ +use proc_macro as pm; +use quote::quote; + +pub(crate) fn export(_attr: syn::AttributeArgs, item: syn::ItemImpl) -> pm::TokenStream { + let mut functions = Vec::new(); + let ty_name = if let syn::Type::Path(x) = item.self_ty.as_ref() { + &x.path.segments.last().unwrap().ident + } else { + unreachable!("Found non-path type in impl") + }; + let (_, ty_generics, _) = item.generics.split_for_impl(); + let impl_generics = &item.generics.params; + let where_clause = &item.generics.where_clause; + for item in &item.items { + if let syn::ImplItem::Method(item) = item { + let mut inputs = item.sig.inputs.clone().into_iter().collect::>(); + let method_name = &item.sig.ident; + let name = crate::utils::new_id(format!("{}_{}", ty_name, method_name)); + let output = &item.sig.output; + // Replace receiver with parameter + if let Some(syn::FnArg::Receiver(r)) = inputs.first() { + assert!(r.reference.is_none(), "Found reference to receiver"); + inputs[0] = syn::parse_quote!(self_param: #ty_name #ty_generics); + } + let (ids, tys): (Vec<_>, Vec<_>) = inputs + .iter() + .map(|i| match i { + syn::FnArg::Receiver(_) => unreachable!(), + syn::FnArg::Typed(i) => (&i.pat, &i.ty), + }) + .unzip(); + // Merge generics and predicates + let generics = match (&item.sig.generics.params, impl_generics) { + (gs0, gs1) if !gs0.is_empty() && !gs1.is_empty() => quote!(<#gs0, #gs1>), + (gs0, _) if !gs0.is_empty() => quote!(<#gs0>), + (_, gs1) if !gs1.is_empty() => quote!(<#gs1>), + _ => quote!(), + }; + let where_clause = match (where_clause, &item.sig.generics.where_clause) { + (Some(w0), Some(w1)) => quote!(where #w0, #w1), + (Some(w), None) | (None, Some(w)) => quote!(where #w), + (None, None) => quote!(), + }; + // Construct wrapper + let item = if item.sig.asyncness.is_some() { + quote! { + pub async fn #name #generics ((#(#ids,)*):(#(#tys,)*)) #output #where_clause { + #ty_name::#method_name(#(#ids,)*).await + } + } + } else { + quote! { + pub fn #name #generics (#(#ids: #tys,)*) #output #where_clause { + #ty_name::#method_name(#(#ids,)*) + } + } + }; + functions.push(item); + } + } + + quote::quote!( + #item + #(#functions)* + ) + .into() +} diff --git a/crates/macros/src/proc_macro_attrs/rewrite/.DS_Store b/crates/macros/src/proc_macro_attrs/rewrite/.DS_Store new file mode 100644 index 0000000..bd2ca2d Binary files /dev/null and b/crates/macros/src/proc_macro_attrs/rewrite/.DS_Store differ diff --git a/crates/macros/src/proc_macro_attrs/rewrite/enums.rs b/crates/macros/src/proc_macro_attrs/rewrite/enums.rs new file mode 100644 index 0000000..f545ffc --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/rewrite/enums.rs @@ -0,0 +1,25 @@ +use proc_macro as pm; +use quote::quote; + +#[allow(unused)] +pub(crate) fn rewrite(attr: syn::AttributeArgs, mut item: syn::ItemEnum) -> pm::TokenStream { + item.vis = syn::parse_quote!(pub); + item.generics.params.iter_mut().for_each(|g| { + if let syn::GenericParam::Type(t) = g { + t.bounds.push(syn::parse_quote!(Data)) + } + }); + + let (impl_generics, type_generics, where_clause) = item.generics.split_for_impl(); + + let variant_id = item.variants.iter().map(|v| &v.ident).collect::>(); + + quote!( + use prelude::*; + + #[derive(Clone, Debug, Unpin, Serialize, Deserialize)] + #[serde(bound = "")] + #item + ) + .into() +} diff --git a/crates/macros/src/proc_macro_attrs/rewrite/externs.rs b/crates/macros/src/proc_macro_attrs/rewrite/externs.rs new file mode 100644 index 0000000..fbf5765 --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/rewrite/externs.rs @@ -0,0 +1,19 @@ +use proc_macro as pm; + +pub(crate) fn rewrite(attr: syn::AttributeArgs, mut item: syn::ItemFn) -> pm::TokenStream { + let unmangled: syn::Path = crate::utils::get_attr_val("unmangled", &attr); + let ids = item.sig.inputs.iter().map(|arg| { + if let syn::FnArg::Typed(p) = arg { + p.pat.as_ref() + } else { + unreachable!() + } + }); + item.sig.abi = None; + if item.sig.asyncness.is_some() { + item.block = syn::parse_quote!({ #unmangled(#(#ids),*).await }); + } else { + item.block = syn::parse_quote!({ #unmangled(#(#ids),*) }); + } + quote::quote!(#item).into() +} diff --git a/crates/macros/src/proc_macro_attrs/rewrite/functions.rs b/crates/macros/src/proc_macro_attrs/rewrite/functions.rs new file mode 100644 index 0000000..52305df --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/rewrite/functions.rs @@ -0,0 +1,10 @@ +use proc_macro as pm; + +pub(crate) fn rewrite(_attr: syn::AttributeArgs, mut item: syn::ItemFn) -> pm::TokenStream { + item.sig.generics.params.iter_mut().for_each(|p| { + if let syn::GenericParam::Type(p) = p { + p.bounds.push(syn::parse_quote!(Data)); + } + }); + quote::quote!(#item).into() +} diff --git a/crates/macros/src/proc_macro_attrs/rewrite/main.rs b/crates/macros/src/proc_macro_attrs/rewrite/main.rs new file mode 100644 index 0000000..f1dec39 --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/rewrite/main.rs @@ -0,0 +1,5 @@ +use proc_macro as pm; + +pub(crate) fn rewrite(_attr: syn::AttributeArgs, _item: syn::ItemFn) -> pm::TokenStream { + todo!() +} diff --git a/crates/macros/src/proc_macro_attrs/rewrite/structs.rs b/crates/macros/src/proc_macro_attrs/rewrite/structs.rs new file mode 100644 index 0000000..66ab7ec --- /dev/null +++ b/crates/macros/src/proc_macro_attrs/rewrite/structs.rs @@ -0,0 +1,51 @@ +use proc_macro as pm; +use quote::quote; + +#[allow(unused)] +pub(crate) fn rewrite(attr: syn::AttributeArgs, mut item: syn::ItemStruct) -> pm::TokenStream { + item.vis = syn::parse_quote!(pub); + item.fields.iter_mut().for_each(|field| { + field.vis = syn::parse_quote!(pub); + }); + item.generics.params.iter_mut().for_each(|g| { + if let syn::GenericParam::Type(t) = g { + t.bounds.push(syn::parse_quote!(Data)) + } + }); + let (impl_generics, type_generics, where_clause) = item.generics.split_for_impl(); + + let wrapper_id = item.ident.clone(); + item.ident = crate::utils::new_id(format!("_{}", wrapper_id)); + let id = &item.ident; + + let field_id = item.fields.iter().map(|f| &f.ident).collect::>(); + + let (inner_type, inner_expr) = + if crate::utils::has_meta_key("compact", &crate::utils::get_metas(&attr)) { + (quote::quote!(#id #type_generics), quote::quote!(data)) + } else { + ( + quote::quote!(Rc<#id #type_generics>), + quote::quote!(Rc::new(data)), + ) + }; + + quote!( + use prelude::*; + + #[derive(Clone, Debug, Unpin, Serialize, Deserialize)] + #[serde(bound = "")] + pub struct #wrapper_id #impl_generics(pub #inner_type) #where_clause; + + impl #impl_generics #wrapper_id #type_generics #where_clause { + pub fn new(data: #id #type_generics) -> Self { + Self(#inner_expr) + } + } + + #[derive(Clone, Debug, Unpin, Serialize, Deserialize)] + #[serde(bound = "")] + #item + ) + .into() +} diff --git a/crates/macros/src/proc_macro_derives.rs b/crates/macros/src/proc_macro_derives.rs new file mode 100644 index 0000000..9617ae5 --- /dev/null +++ b/crates/macros/src/proc_macro_derives.rs @@ -0,0 +1,165 @@ +use proc_macro::TokenStream; +use syn::TypeParam; + +pub fn derive_send(input: syn::DeriveInput) -> TokenStream { + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = &input.ident; + quote::quote!(unsafe impl #impl_generics Send for #name #type_generics #where_clause {}).into() +} + +pub fn derive_sync(input: syn::DeriveInput) -> TokenStream { + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = &input.ident; + quote::quote!(unsafe impl #impl_generics Sync for #name #type_generics #where_clause {}).into() +} + +pub fn derive_unpin(input: syn::DeriveInput) -> TokenStream { + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = &input.ident; + quote::quote!(impl #impl_generics Unpin for #name #type_generics #where_clause {}).into() +} + +pub fn derive_deep_clone(mut input: syn::DeriveInput) -> TokenStream { + for param in &mut input.generics.params { + if let syn::GenericParam::Type(TypeParam { bounds, .. }) = param { + bounds.push(syn::parse_quote!(DeepClone)); + } + } + + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = &input.ident; + match &input.data { + syn::Data::Struct(data) => { + let fields = data.fields.iter().enumerate().map(|(i, field)| { + if let Some(name) = &field.ident { + quote::quote!(#name: <_ as DeepClone>::deep_clone(&self.#name)) + } else { + let index = syn::Index::from(i); + quote::quote!(#index: <_ as DeepClone>::deep_clone(&self.#index)) + } + }); + quote::quote!( + impl #impl_generics DeepClone for #name #type_generics #where_clause { + #[inline(always)] + fn deep_clone(&self) -> Self { + Self { + #(#fields),* + } + } + } + ) + .into() + } + syn::Data::Enum(data) => { + let variants = data.variants.iter().map(|variant| { + let name = &variant.ident; + let names = variant.fields.iter().enumerate().map(|(i, field)| { + if let Some(name) = &field.ident { + quote::quote!(#name) + } else { + let index = syn::Index::from(i); + let id = + syn::Ident::new(&format!("field{}", i), proc_macro2::Span::call_site()); + quote::quote!(#index: #id) + } + }); + let fields = variant.fields.iter().enumerate().map(|(i, field)| { + if let Some(name) = &field.ident { + quote::quote!(#name: <_ as DeepClone>::deep_clone(&self.#name)) + } else { + let index = syn::Index::from(i); + let id = + syn::Ident::new(&format!("field{}", i), proc_macro2::Span::call_site()); + quote::quote!(#index: <_ as DeepClone>::deep_clone(#id)) + } + }); + quote::quote!(Self::#name { #(#names),* } => Self::#name { #(#fields),* }) + }); + quote::quote!( + impl #impl_generics DeepClone for #name #type_generics #where_clause { + #[inline(always)] + fn deep_clone(&self) -> Self { + match self { + #(#variants),* + } + } + } + ) + .into() + } + syn::Data::Union(_) => unreachable!(), + } +} + +pub(crate) fn derive_extract_timestamp(input: syn::DeriveInput) -> TokenStream { + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = &input.ident; + + let timestamp_field = if let syn::Data::Struct(data) = &input.data { + data.fields + .iter() + .find_map(|f| { + f.attrs + .iter() + .find_map(|attr| attr.path().is_ident("timestamp").then(|| Some(f))) + }) + .flatten() + } else { + None + }; + + if let Some(field) = timestamp_field { + let field_name = &field.ident; + quote::quote! { + impl #impl_generics ::runtime::traits::Timestamp for #name #type_generics #where_clause { + #[inline(always)] + fn timestamp(&self) -> Time { + Time::from_milliseconds(self.#field_name as i128) + } + } + } + .into() + } else { + quote::quote!().into() + } +} + +pub(crate) fn derive_new(input: syn::DeriveInput) -> TokenStream { + let (impl_generics, type_generics, where_clause) = input.generics.split_for_impl(); + let name = input.ident; + let vis = input.vis; + + let fields = if let syn::Data::Struct(data) = input.data { + if let syn::Fields::Named(fields) = data.fields { + fields.named + } else { + panic!("#[derive(New)] only supports structs with named fields"); + } + } else { + panic!("#[derive(New)] only supports structs"); + }; + + let params = fields.iter().map(|f| { + let name = &f.ident; + let ty = &f.ty; + quote::quote! { #name: #ty } + }); + + let init_fields = fields.iter().map(|f| { + let name = &f.ident; + quote::quote! { #name: #name } + }); + + let gen = quote::quote! { + impl #impl_generics #name #type_generics #where_clause { + #[inline(always)] + #vis fn new(#(#params),*) -> Self { + Self { + #(#init_fields),* + } + } + } + }; + + gen.into() +} diff --git a/crates/macros/src/proc_macros.rs b/crates/macros/src/proc_macros.rs new file mode 100644 index 0000000..f9baf40 --- /dev/null +++ b/crates/macros/src/proc_macros.rs @@ -0,0 +1,8 @@ +use proc_macro::TokenStream; + +pub fn unwrap(input: TokenStream) -> TokenStream { + let mut iter = input.into_iter(); + let expr: syn::Expr = crate::utils::parse(&mut iter); + let path: syn::Path = crate::utils::parse(&mut iter); + quote::quote!(if let #path(v) = &#expr { v.clone() } else { unreachable!() }).into() +} diff --git a/crates/macros/src/utils.rs b/crates/macros/src/utils.rs new file mode 100644 index 0000000..050af0e --- /dev/null +++ b/crates/macros/src/utils.rs @@ -0,0 +1,12 @@ +use proc_macro as pm; + +pub(crate) fn parse(input: &mut impl Iterator) -> T { + let mut stream = pm::TokenStream::new(); + for token in input.by_ref() { + match token { + pm::TokenTree::Punct(t) if t.as_char() == ',' => break, + _ => stream.extend([token]), + } + } + syn::parse::(stream).unwrap() +} diff --git a/crates/opt/Cargo.lock b/crates/opt/Cargo.lock new file mode 100644 index 0000000..fdcf679 --- /dev/null +++ b/crates/opt/Cargo.lock @@ -0,0 +1,221 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "algebraic-solver2" +version = "0.1.0" +dependencies = [ + "egg", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "egg" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96beaf9d35dbc4686bc86a4ecb851fd6a406f0bf32d9f646b1225a5c5cf5b5d7" +dependencies = [ + "env_logger", + "fxhash", + "hashbrown", + "indexmap", + "instant", + "log", + "smallvec", + "symbol_table", + "symbolic_expressions", + "thiserror", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "log", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "symbol_table" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32bf088d1d7df2b2b6711b06da3471bc86677383c57b27251e18c56df8deac14" +dependencies = [ + "ahash", + "hashbrown", +] + +[[package]] +name = "symbolic_expressions" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c68d531d83ec6c531150584c42a4290911964d5f0d79132b193b67252a23b71" + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" diff --git a/crates/opt/Cargo.toml b/crates/opt/Cargo.toml new file mode 100644 index 0000000..2e83c8e --- /dev/null +++ b/crates/opt/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "opt" +version.workspace = true +edition.workspace = true + +[dependencies] +egg = "0.9.5" diff --git a/crates/opt/src/analysis.rs b/crates/opt/src/analysis.rs new file mode 100644 index 0000000..449d693 --- /dev/null +++ b/crates/opt/src/analysis.rs @@ -0,0 +1,58 @@ +#![allow(unused)] +use std::collections::HashSet; + +use egg::merge_option; +use egg::Analysis; +use egg::DidMerge; +use egg::Id; +use egg::PatternAst; + +use crate::lang::AquaLang; + +pub struct PartialEval; + +#[derive(Debug)] +pub struct Data { + free: HashSet, + constant: Option<(AquaLang, PatternAst)>, +} + +// impl Analysis for PartialEval { +// type Data = Data; +// +// fn make(egraph: &egg::EGraph, enode: &AquaLang) -> Self::Data { +// let f = |i: &Id| egraph[*i].data.free.iter().cloned(); +// let mut free = HashSet::default(); +// match enode { +// AquaLang::Var(v) => { +// free.insert(*v); +// } +// AquaLang::Let([v, a, b]) => { +// free.extend(f(b)); +// free.remove(v); +// free.extend(f(a)); +// } +// AquaLang::Lambda([v, a]) | AquaLang::Fix([v, a]) => { +// free.extend(f(a)); +// free.remove(v); +// } +// _ => enode.for_each(|c| free.extend(&egraph[c].data.free)), +// } +// let constant = eval(egraph, enode); +// Data { constant, free } +// } +// +// fn merge(&mut self, to: &mut Self::Data, from: Self::Data) -> egg::DidMerge { +// let before_len = to.free.len(); +// // to.free.extend(from.free); +// to.free.retain(|i| from.free.contains(i)); +// // compare lengths to see if I changed to or from +// DidMerge( +// before_len != to.free.len(), +// to.free.len() != from.free.len(), +// ) | merge_option(&mut to.constant, from.constant, |a, b| { +// assert_eq!(a.0, b.0, "Merged non-equal constants"); +// DidMerge(false, false) +// }) +// } +// } diff --git a/crates/opt/src/cost.rs b/crates/opt/src/cost.rs new file mode 100644 index 0000000..7bf1753 --- /dev/null +++ b/crates/opt/src/cost.rs @@ -0,0 +1,20 @@ +use egg::CostFunction; +use egg::Language; + +use crate::lang::AquaLang; + +pub struct Inverter; + +impl CostFunction for Inverter { + type Cost = usize; + + fn cost(&mut self, enode: &AquaLang, mut costs: C) -> Self::Cost + where + C: FnMut(egg::Id) -> Self::Cost, + { + match enode { + AquaLang::Symbol(s) if s.as_str() == "x" => 100, + _ => enode.fold(1, |sum, id| sum.saturating_add(costs(id))), + } + } +} diff --git a/crates/opt/src/lang.rs b/crates/opt/src/lang.rs new file mode 100644 index 0000000..e665fc2 --- /dev/null +++ b/crates/opt/src/lang.rs @@ -0,0 +1,56 @@ +use egg::define_language; +use egg::Id; + +define_language! { + pub enum AquaLang { + Num(i32), + Bool(bool), + + "add" = Add([Id; 2]), + "mul" = Mul([Id; 2]), + "div" = Div([Id; 2]), + "sub" = Sub([Id; 2]), + "pow" = Pow([Id; 2]), + "log" = Ln([Id; 2]), + "sqrt" = Sqrt([Id; 1]), + "sin" = Sin([Id; 1]), + "cos" = Cos([Id; 1]), + + "inv" = Inv([Id; 1]), + + "eq" = Eq([Id; 2]), + "le" = Le([Id; 2]), + "lt" = Lt([Id; 2]), + "and" = And([Id; 2]), + "or" = Or([Id; 2]), + "not" = Not([Id; 1]), + + "if" = If([Id; 3]), + + "min" = Min([Id; 2]), + "max" = Max([Id; 2]), + + "fun" = Fun(Vec), + "call" = Call([Id; 2]), + "compose" = Compose([Id; 2]), + "_" = Wild, + "seq" = Seq([Id; 2]), + "val" = Val([Id; 3]), + "use" = Use([Id; 1]), + + "tuple" = Tuple(Vec), + + "map" = Map([Id; 1]), + "filter" = Filter([Id; 1]), + "filtermap" = FilterMap([Id; 1]), + "fold" = Fold([Id; 3]), + "foldmap" = FoldMap([Id; 4]), + + "enum" = Enum([Id; 3]), + "pair" = Pair([Id; 2]), + "fst" = Fst([Id; 1]), + "snd" = Snd([Id; 1]), + + Symbol(egg::Symbol), + } +} diff --git a/crates/opt/src/lib.rs b/crates/opt/src/lib.rs new file mode 100644 index 0000000..a85dc24 --- /dev/null +++ b/crates/opt/src/lib.rs @@ -0,0 +1,103 @@ +pub mod rules; +pub mod lang; +pub mod analysis; +pub mod cost; +use lang::AquaLang; + +use egg::*; + +fn paren(s: &str) -> String { + if s.starts_with('(') { + s.to_string() + } else { + format!("({})", s) + } +} + +pub struct Solver(Vec>); + +impl Solver { + pub fn new() -> Self { + Self(vec![]) + } + pub fn load(mut self, rules: Vec>) -> Self { + self.0.extend(rules); + self + } + + pub fn check_associativity(&self, expr: &str) -> Result<(), String> { + let lhs = paren( + &expr + .replace("?x", &paren(&expr.replace("?x", "a").replace("?y", "b"))) + .replace("?y", "c"), + ); + + let rhs = paren( + &expr + .replace("?x", "a") + .replace("?y", &paren(&expr.replace("?x", "b").replace("?y", "c"))), + ); + + self.check(&lhs, &rhs) + } + + // f(x, y) = f(y, x) + pub fn check_commutativity(&self, expr: &str) -> Result<(), String> { + let lhs = paren(&expr.replace("?x", "a").replace("?y", "b")); + let rhs = paren(&expr.replace("?x", "b").replace("?y", "a")); + + self.check(&lhs, &rhs) + } + + pub fn check(&self, lhs: &str, rhs: &str) -> Result<(), String> { + println!("Checking {} == {}", lhs, rhs); + let start = lhs.parse().unwrap(); + let goals = [rhs.parse().unwrap()]; + + let runner = Runner::default() + .with_explanations_enabled() + .with_expr(&start); + + let id = runner.egraph.find(*runner.roots.last().unwrap()); + let goals_vec = goals.to_vec(); + + let mut runner = runner + .with_hook(move |r| { + if goals_vec + .iter() + .all(|g: &Pattern<_>| g.search_eclass(&r.egraph, id).is_some()) + { + Err("Proved all goals".into()) + } else { + Ok(()) + } + }) + .run(&self.0); + + for (i, goal) in goals.iter().enumerate() { + for goal in goals.iter() { + if let Some(matches) = goal.search_eclass(&runner.egraph, id) { + let subst = matches.substs[0].clone(); + runner = runner.without_explanation_length_optimization(); + let mut explained = runner.explain_matches(&start, &goal.ast, &subst); + explained.get_string_with_let(); + let flattened = explained.make_flat_explanation().clone(); + let vanilla_len = flattened.len(); + explained.check_proof(&self.0); + + runner = runner.with_explanation_length_optimization(); + let mut explained_short = runner.explain_matches(&start, &goal.ast, &subst); + explained_short.get_string_with_let(); + let short_len = explained_short.get_flat_strings().len(); + assert!(short_len <= vanilla_len); + explained_short.check_proof(&self.0); + } + } + if goal.search_eclass(&runner.egraph, id).is_none() { + return Err(format!("Goal {} not proved: {start} != {goal}", i)); + } + } + + Ok(()) + } +} diff --git a/crates/opt/src/rules.rs b/crates/opt/src/rules.rs new file mode 100644 index 0000000..65f1f17 --- /dev/null +++ b/crates/opt/src/rules.rs @@ -0,0 +1,242 @@ +use egg::Analysis; +use egg::Rewrite; + +use egg::rewrite as rw; + +use crate::AquaLang; + +pub fn arithmetic>() -> Vec> { + vec![ + // Addition + rw!("add-0"; "(add ?a 0)" => "?a"), + rw!("add-commutative"; "(add ?a ?b)" => "(add ?b ?a)"), + rw!("add-associative"; "(add ?a (add ?b ?c))" => "(add (add ?a ?b) ?c)"), + // Subtraction + rw!("sub-0"; "(sub ?a 0)" => "?a"), + rw!("sub-cancel"; "(sub ?a ?a)" => "0"), + rw!("sub => add-sub"; "(sub ?a ?b)" => "(add ?a (mul -1 ?b))"), + rw!("sub-semi-associative"; "(sub (sub ?a ?b) ?c)" => "(sub ?a (add ?b ?c))"), + // Multiplication + rw!("mul-0"; "(mul ?a 0)" => "0"), + rw!("mul-1"; "(mul ?a 1)" => "?a"), + rw!("mul-commutative"; "(mul ?a ?b)" => "(mul ?b ?a)"), + rw!("mul-associative"; "(mul ?a (mul ?b ?c))" => "(mul (mul ?a ?b) ?c)"), + // Division + rw!("div-1"; "(div ?a 1)" => "?a"), + rw!("div-cancel"; "(div ?a ?a)" => "1"), + rw!("div => mul-pow"; "(div ?a ?b)" => "(mul ?a (pow ?b -1))"), + rw!("div-semi-associative"; "(div (div ?a ?b) ?c)" => "(div ?a (mul ?b ?c))"), + // Addition-Multiplication + rw!("add-mul-distribute"; "(mul ?a (add ?b ?c))" => "(add (mul ?a ?b) (mul ?a ?c))"), + rw!("add-mul-factor" ; "(add (mul ?a ?b) (mul ?a ?c))" => "(mul ?a (add ?b ?c))"), + // Addition-Subtraction + rw!("add-sub-cancel"; "(sub (add ?a ?x) ?a)" => "?x"), + rw!("sub-add-cancel"; "(add (sub ?a ?x) ?a)" => "?x"), + // Multiplication-Division + rw!("mul-div-cancel"; "(div (mul ?a ?b) ?a)" => "?b"), + rw!("div-mul-cancel"; "(mul (div ?a ?b) ?b)" => "?a"), + ] +} + +pub fn logarithmic>() -> Vec> { + vec![ + // Logarithm + rw!("log-base-1"; "(log 1 ?a)" => "0"), + // Logarithm-Mixed + rw!("log-mul"; "(log ?base (mul ?a ?b))" => "(add (log ?base ?a) (log ?base ?b))"), + rw!("log-div"; "(log ?base (div ?a ?b))" => "(sub (log ?base ?a) (log ?base ?b))"), + rw!("log-pow"; "(log ?base1 (pow ?base2 ?exp))" => "(mul ?base2 (log ?base1 ?exp))"), + rw!("log-log"; "(log ?base (log ?base ?a))" => "?a"), + ] +} + +pub fn power>() -> Vec> { + vec![ + // Power + rw!("pow-exp-0"; "(pow ?base 0)" => "1"), + rw!("pow-exp-1"; "(pow ?base 1)" => "?base"), + rw!("pow-base-0"; "(pow 0 ?exp)" => "0"), + rw!("pow-base-1"; "(pow 1 ?exp)" => "1"), + // Power-Mixed + rw!("pow-mul"; "(mul (pow ?base ?exp1) (pow ?base ?exp2))" => "(pow ?base (add ?exp1 ?exp2))"), + rw!("pow-pow"; "(pow (pow ?base ?exp1) ?exp2)" => "(pow ?base (mul ?exp1 ?exp2))"), + rw!("pow-div"; "(div (pow ?base ?exp1) (pow ?base ?exp2))" => "(pow ?base (sub ?exp1 ?exp2))"), + // Sqrt-pow + rw!("sqrt-pow-2"; "(sqrt (pow ?base 2))" => "?base"), + rw!("pow-2-sqrt"; "(pow (sqrt ?base) 2)" => "?base"), + rw!("sqrt-pow-2-inv"; "?base" => "(sqrt (pow ?base 2))"), + rw!("pow-2-sqrt-inv"; "?base" => "(pow (sqrt ?base) 2)"), + ] +} + +pub fn trigonometric>() -> Vec> { + vec![ + // Sine and Cosine + rw!("sin-sum"; "(sin (add ?a ?b))" => "(add (mul (sin ?a) (cos ?b)) (mul (cos ?a) (sin ?b)))"), + rw!("sin-difference"; "(sin (sub ?a ?b))" => "(sub (mul (sin ?a) (cos ?b)) (mul (cos ?a) (sin ?b)))"), + rw!("cos-sum"; "(cos (add ?a ?b))" => "(sub (mul (cos ?a) (cos ?b)) (mul (sin ?a) (sin ?b)))"), + rw!("cos-difference"; "(cos (sub ?a ?b))" => "(add (mul (cos ?a) (cos ?b)) (mul (sin ?a) (sin ?b)))"), + rw!("sin-double-angle"; "(sin (mul 2 ?a))" => "(mul (mul 2 (sin ?a)) (cos ?a))"), + rw!("cos-double-angle"; "(cos (mul 2 ?a))" => "(sub (pow (cos ?a) 2) (pow (sin ?a) 2))"), + rw!("sin-half-angle"; "(pow (sin (div ?a 2)) 2)" => "(div (sub 1 (cos ?a)) 2)"), + rw!("cos-half-angle"; "(pow (cos (div ?a 2)) 2)" => "(div (add 1 (cos ?a)) 2)"), + rw!("sin-cos-product-to-sum"; "(mul (sin ?a) (cos ?b))" => "(div (add (sin (sub ?a ?b)) (sin (add ?a ?b))) 2)"), + rw!("cos-sin-product-to-sum"; "(mul (cos ?a) (sin ?b))" => "(div (sub (sin (add ?a ?b)) (sin (sub ?a ?b))) 2)"), + rw!("cos-cos-product-to-sum"; "(mul (cos ?a) (cos ?b))" => "(div (add (cos (sub ?a ?b)) (cos (add ?a ?b))) 2)"), + rw!("sin-sin-product-to-sum"; "(mul (sin ?a) (sin ?b))" => "(div (sub (cos (sub ?a ?b)) (cos (add ?a ?b))) 2)"), + rw!("sin-sum-to-product"; "(add (sin ?a) (sin ?b))" => "(mul (mul 2 (sin (div (add ?a ?b) 2))) (cos (div (sub ?a ?b) 2)))"), + rw!("sin-difference-to-product"; "(sub (sin ?a) (sin ?b))" => "(mul (mul 2 (cos (div (add ?a ?b) 2))) (sin (div (sub ?a ?b) 2)))"), + rw!("cos-sum-to-product"; "(add (cos ?a) (cos ?b))" => "(mul (mul 2 (cos (div (add ?a ?b) 2))) (cos (div (sub ?a ?b) 2)))"), + rw!("cos-difference-to-product"; "(sub (cos ?a) (cos ?b))" => "(mul (mul -2 (sin (div (add ?a ?b) 2))) (sin (div (sub ?a ?b) 2)))"), + ] +} + +pub fn logical>() -> Vec> { + vec![ + // Not + rw!("not-not"; "(not (not ?a))" => "?a"), + rw!("not-true"; "(not true)" => "false"), + rw!("not-false"; "(not false)" => "true"), + // And + rw!("and-true"; "(and ?a true)" => "?a"), + rw!("and-false"; "(and ?a false)" => "false"), + rw!("and-associative"; "(and ?a (and ?b ?c))" => "(and (and ?a ?b) ?c)"), + rw!("and-commutative"; "(and ?a ?b)" => "(and ?b ?a)"), + // rw!("and-idempotence"; "(and ?a ?a)" => "?a"), + // Or + rw!("or-true"; "(or ?a true)" => "true"), + rw!("or-false"; "(or ?a false)" => "?a"), + rw!("or-associative"; "(or ?a (or ?b ?c))" => "(or (or ?a ?b) ?c)"), + rw!("or-commutative"; "(or ?a ?b)" => "(or ?b ?a)"), + rw!("or-idempotence"; "(or ?a ?a)" => "?a"), + // Not-And-Or + rw!("and-or-distribute"; "(and ?a (or ?b ?c))" => "(or (and ?a ?b) (and ?a ?c))"), + rw!("or-and-distribute"; "(or ?a (and ?b ?c))" => "(and (or ?a ?b) (or ?a ?c))"), + rw!("not-and"; "(not (and ?a ?b))" => "(or (not ?a) (not ?b))"), + rw!("not-or"; "(not (or ?a ?b))" => "(and (not ?a) (not ?b))"), + ] +} + +pub fn relational>() -> Vec> { + vec![ + // Eq + rw!("eq-reflexive"; "(eq ?a ?a)" => "true"), + rw!("eq-commutative"; "(eq ?a ?b)" => "(eq ?b ?a)"), + rw!("eq-transitive"; "(and (eq ?a ?b) (eq ?b ?c))" => "(eq ?a ?c)"), + // Le + rw!("le-reflexive"; "(le ?a ?a)" => "true"), + rw!("le-antisymmetric"; "(and (le ?a ?b) (le ?b ?a))" => "(eq ?a ?b)"), + rw!("le-transitive"; "(and (le ?a ?b) (le ?b ?c))" => "(le ?a ?c)"), + rw!("le-negate"; "(le ?a ?b)" => "(not (lt ?b ?a))"), + rw!("le-negate-rev"; "(le ?a ?b)" => "(not (lt ?b ?a))"), + rw!("le-decompose"; "(le ?a ?b)" => "(or (lt ?a ?b) (eq ?a ?b))"), + // Lt + rw!("lt-anti-reflexive"; "(lt ?a ?a)" => "false"), + rw!("lt-transitive"; "(and (lt ?a ?b) (lt ?b ?c))" => "(lt ?a ?c)"), + rw!("lt-assymetric"; "(lt ?a ?b)" => "(not (lt ?b ?a))"), + rw!("lt-negate"; "(lt ?a ?b)" => "(not (le ?b ?a))"), + rw!("lt-negate-rev"; "(not (lt ?a ?b))" => "(le ?b ?a)"), + ] +} + +pub fn if_else>() -> Vec> { + vec![ + // If (Flatten) + rw!("if-true"; "(if true ?then ?else)" => "?then"), + rw!("if-false"; "(if false ?then ?else)" => "?else"), + rw!("if-true-false"; "(if ?cond true false)" => "?cond"), + rw!("if-true-true"; "(if ?cond true true)" => "true"), + rw!("if-false-true"; "(if ?cond false true)" => "(not ?cond)"), + rw!("if-false-false"; "(if false ?then ?else)" => "?else"), + rw!("if-elim"; "(if ?cond ?branch ?branch)" => "?branch"), + rw!("if-negate"; "(if (not ?cond) ?branch1 ?branch2)" => "(if ?cond ?branch2 ?branch1)"), + rw!("if-negate-rev"; "(if ?cond ?branch1 ?branch2)" => "(if (not ?cond) ?branch2 ?branch1)"), + rw!("if-associate-1"; "(if ?cond1 (if ?cond2 ?then ?else1) ?else2)" => "(if (and ?cond1 ?cond2) ?then (if ?cond1 ?else1 ?else2))"), + rw!("if-associate-2"; "(if ?cond1 ?then1 (if ?cond2 ?then2 ?else))" => "(if (and ?cond1 (not ?cond2)) ?else (if ?cond1 ?then1 ?then2))"), + rw!("if-cond-swap"; "(if (if ?cond ?a ?b) ?c ?d)" => "(if ?cond (if ?a ?c ?d) (if ?b ?c ?d))"), + rw!("if-cond-elim-then"; "(if ?cond (if ?cond ?a ?b) ?c)" => "(if ?cond ?a ?c)"), + rw!("if-cond-elim-else"; "(if ?cond ?a (if ?cond ?b ?c))" => "(if ?cond ?a ?c)"), + rw!("if-cond-flatten"; "(if ?cond (if ?cond ?a ?b) ?c)" => "(if ?cond ?a ?c)"), + ] +} + +pub fn min_max>() -> Vec> { + vec![ + // Min, Max + rw!("min-associative"; "(min ?a (min ?b ?c))" => "(min (min ?a ?b) ?c)"), + rw!("max-associative"; "(max ?a (max ?b ?c))" => "(max (max ?a ?b) ?c)"), + rw!("min-commutative"; "(min ?a ?b)" => "(min ?b ?a)"), + rw!("max-commutative"; "(max ?a ?b)" => "(max ?b ?a)"), + ] +} + +pub fn inverse>() -> Vec> { + vec![rw!("inv-mul"; "(inv (add (mul ?a ?b) ?c))" => "(div (inv (add ?a ?b))")] +} + +pub fn function>() -> Vec> { + vec![ + rw!("fun-lift"; "?x" => "(fun _ ?x)"), + rw!("compose"; "(compose ?f ?g)" => "(fun a (call ?f (call ?g a)))"), + ] +} + +pub fn for_loop>() -> Vec> { + vec![ + rw!("for-to-fold"; "(for ?x ?iter ?init ?body)" => "(fold ?iter ?init (lambda (?x ?acc) ?body))"), + ] +} + +pub fn filter>() -> Vec> { + vec![ + rw!("filter-filter"; "(filter (filter ?x ?f) ?g)" => "(filter ?x ((fun a (and (call ?f a) (call ?g a))))"), + rw!("filter-2x"; "(filter (filter ?x ?f) ?f)" => "(filter ?x ?f"), + rw!("filter-map"; "(map (filter ?x ?f) ?g)" => "(filtermap (fun a (if (call ?f a) (enum Option Some ?a) (enum Option None unit))))"), + rw!("filter-true"; "(filter ?x (fun ?a true))" => "?x"), + ] +} + +pub fn map>() -> Vec> { + vec![ + rw!("map-map"; "(map (map ?x ?f) ?g)" => "(map ?x (compose ?f ?g))"), + rw!("map-id"; "(map ?x (fun ?a ?a))" => "?x"), + ] +} + +// (fold ?x ?init ?lift ?combine ?lower) +pub fn fold>() -> Vec> { + vec![ + rw!("fold-fusion"; + "(pair (fold ?x ?init0 ?combine0) (fold ?x ?init1 ?combine1))" => + "(fold + ?x + (fun elem (pair (call ?init0 elem) (call ?init1 elem))) + (fun acc (fun elem + (pair + (call (call ?combine0 (fst acc)) elem) + (call (call ?combine1 (snd acc)) elem)))))"), + rw!("fold-sum-mul"; "(fold ?x 0 (fun ?acc (fun ?elem (add ?acc (mul ?const ?elem)))))" => + "(mul ?const (fold ?x 0 (fun ?acc (fun ?elem (add ?acc ?elem)))))"), + ] +} + +pub fn foldmap>() -> Vec> { + vec![ + rw!("fold-to-foldmap"; "(fold (map ?x ?f) ?init ?lift ?combine ?lower)" => + "(fold ?x ?init (compose ?lift ?f) ?combine ?lower)"), + rw!("foldmap-fusion"; "(pair + (foldmap ?x (?id0 ?lift0 ?combine0 ?lower0)) + (foldmap ?x (?id1 ?lift1 ?combine1 ?lower1)) + )" => "(foldmap (?x + (pair ?id0 ?id1) + (fun a (pair (call ?lift0 a) (call ?lift1 a))) + (fun a (fun b (pair (?combine0 (fst a) (fst b) ) + (?combine1 (snd a) (snd b) )))) + (fun a (pair (?lower0 (fst a)) + (?lower1 (snd a))))))"), + rw!("map-fold"; "(fold (map ?x ?f) ?init ?lift ?combine ?lower)" => + "(fold ?x ?init (compose ?lift ?f) ?combine ?lower)"), + rw!("fold-map"; "(map (fold ?x ?init ?lift ?combine ?lower) ?f)" => + "(fold ?x ?init ?lift ?combine (compose ?lower ?f)"), + ] +} diff --git a/crates/opt/tests/basic.rs b/crates/opt/tests/basic.rs new file mode 100644 index 0000000..9ed11f1 --- /dev/null +++ b/crates/opt/tests/basic.rs @@ -0,0 +1,52 @@ +use opt::rules; +use opt::Solver; + +// f(?x,?y) = ?x * ?y +#[test] +fn test_product() { + let f = "(mul ?x ?y)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_ok()); + assert!(solver.check_commutativity(f).is_ok()); +} + +#[test] +fn test_division() { + let f = "(div ?x ?y)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_err()); + assert!(solver.check_commutativity(f).is_err()); +} + +#[test] +fn test_subtraction() { + let f = "(sub ?x ?y)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_err()); + assert!(solver.check_commutativity(f).is_err()); +} + +// sqrt(?x^2) = ?x +// sqrt(?x)^2 = ?x +#[test] +fn test_sqrt_pow() { + let f0 = "(sqrt (pow ?x 2))"; + let f1 = "(pow (sqrt ?x) 2)"; + let solver = Solver::new().load(rules::arithmetic()).load(rules::power()); + + assert!(solver.check(f0, "?x").is_ok()); + assert!(solver.check(f1, "?x").is_ok()); +} + +// f(?x,?y) = ?x + ?y +#[test] +fn test_sum() { + let f = "(add ?x ?y)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_ok()); + assert!(solver.check_commutativity(f).is_ok()); +} diff --git a/crates/opt/tests/dataflow.rs b/crates/opt/tests/dataflow.rs new file mode 100644 index 0000000..82314a9 --- /dev/null +++ b/crates/opt/tests/dataflow.rs @@ -0,0 +1,17 @@ +use opt::rules; +use opt::Solver; + +#[test] +fn test_fold_fold() { + let lhs = "(pair (fold ?x ?init0 ?combine0) (fold ?x ?init1 ?combine1))"; + let rhs = "(fold + ?x + (fun elem (pair (call ?init0 elem) (call ?init1 elem))) + (fun acc (fun elem + (pair + (call (call ?combine0 (fst acc)) elem) + (call (call ?combine1 (snd acc)) elem)))))"; + let s = Solver::new().load(rules::fold()).load(rules::function()); + + assert!(s.check(lhs, rhs).is_ok()); +} diff --git a/crates/opt/tests/udaf.rs b/crates/opt/tests/udaf.rs new file mode 100644 index 0000000..97c838a --- /dev/null +++ b/crates/opt/tests/udaf.rs @@ -0,0 +1,138 @@ +// Commutative = We can keep one partial aggregate +// Associative = We can keep a tree of partial aggregates + +// These tests verify algebraic properties of advanced UDAFs (User Defined Aggregate Functions) +// that contain composite expressions. These tests use an algebraic solver to rewrite the +// expressions to verify if they are commutative and associative. + +use opt::rules; +use opt::Solver; + +// f(?x,?y) = ?x + ?y + 2 +// f(?y,?x) = ?y + ?x + 2 +#[test] +fn test_sum_const() { + let f = "(add (add ?x ?y) 2)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_ok()); + assert!(solver.check_commutativity(f).is_ok()); +} + +// f(?x,?y) = ?x^2 + ?y^2 +#[test] +fn test_pow_sum() { + let f = "(add (pow ?x 2) (pow ?y 2))"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_err()); +} + +// f(?x,?y) = sqrt(?x^2 + ?y^2) +#[test] +fn test_euclidean_norm() { + let f = "(sqrt (add (pow ?x 2) (pow ?y 2)))"; + let solver = Solver::new().load(rules::arithmetic()).load(rules::power()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_ok()); +} + +// f(?x,?y) = ?x * ?y * 2 +#[test] +fn test_product_const() { + let f = "(mul (mul ?x ?y) 2)"; + let solver = Solver::new().load(rules::arithmetic()); + + assert!(solver.check_associativity(f).is_ok()); + assert!(solver.check_commutativity(f).is_ok()); +} + +// Trigonometric functions +// f(?x,?y) = sin(?x) + sin(?y) +#[test] +fn test_sin_sum() { + let f = "(add (sin ?x) (sin ?y))"; + let solver = Solver::new() + .load(rules::arithmetic()) + .load(rules::trigonometric()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_err()); +} + +#[test] +fn test_cos_sum() { + let f = "(add (cos ?x) (cos ?y))"; + let solver = Solver::new() + .load(rules::arithmetic()) + .load(rules::trigonometric()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_err()); +} + +#[test] +fn test_cond_min() { + let f = "(if (le ?x ?y) ?x ?y)"; + let solver = Solver::new() + .load(rules::relational()) + .load(rules::if_else()); + assert!(solver.check_commutativity(f).is_ok()); + // assert!(solver.check_associativity(f).is_ok()); +} + +#[test] +fn test_cond_max() { + let f = "(if (le ?x ?y) ?y ?x)"; + let solver = Solver::new() + .load(rules::relational()) + .load(rules::if_else()); + + assert!(solver.check_commutativity(f).is_ok()); + // assert!(solver.check_associativity(f).is_ok()); +} + +#[test] +fn test_min() { + let f = "(min ?x ?y)"; + let solver = Solver::new().load(rules::min_max()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_ok()); +} + +#[test] +fn test_max() { + let f = "(max ?x ?y)"; + let solver = Solver::new().load(rules::min_max()); + + assert!(solver.check_commutativity(f).is_ok()); + assert!(solver.check_associativity(f).is_ok()); +} + +// #[test] +// fn test_sum_vec() { +// todo!() +// } + +#[test] +fn test_fun() { + let solver = Solver::new().load(rules::function()); + + assert!(solver.check("(fun ?a ?b)", "(fun ?x ?y)").is_ok()); +} + +#[test] +fn test_fun_call() { + let solver = Solver::new(); //.load(rules::function()); + + assert!(solver.check("?x", "?x").is_ok()); +} + +#[test] +fn test_stddev() { + let solver = Solver::new().load(rules::arithmetic()).load(rules::power()); + assert!(solver.check_associativity("(fold)").is_ok()); +} diff --git a/crates/repl/Cargo.toml b/crates/repl/Cargo.toml new file mode 100644 index 0000000..9e3c1dd --- /dev/null +++ b/crates/repl/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "repl" +version.workspace = true +edition.workspace = true + +[dependencies] +compiler = { path = "../compiler" } + +anyhow = { version = "1.0.75" } +regex = { version = "1.10.3" } +rustyline = { version = "13.0.0", features = ["derive", "custom-bindings"] } +colored = { version = "2.0.4" } diff --git a/crates/repl/src/helper/completer.rs b/crates/repl/src/helper/completer.rs new file mode 100644 index 0000000..e48d606 --- /dev/null +++ b/crates/repl/src/helper/completer.rs @@ -0,0 +1,55 @@ +// use compiler_passes_lexer::tokens::KEYWORDS; +use rustyline::completion::Completer; +use rustyline::completion::Pair; +use rustyline::Result; + +pub struct KeywordCompleter; + +impl Default for KeywordCompleter { + fn default() -> Self { + Self::new() + } +} + +impl KeywordCompleter { + pub fn new() -> Self { + Self + } +} + +impl Completer for KeywordCompleter { + type Candidate = Pair; + + fn complete( + &self, + line: &str, + pos: usize, + _ctx: &rustyline::Context<'_>, + ) -> Result<(usize, Vec)> { + todo!() + // let mut start = pos - 1; + // let mut end = pos; + // let chars = line.chars().collect::>(); + // while start > 0 { + // match chars[start] { + // 'a'..='z' => start -= 1, + // _ => break, + // } + // } + // while end < line.len() { + // match chars[end] { + // 'a'..='z' => end += 1, + // _ => break, + // } + // } + // let matches = KEYWORDS + // .into_iter() + // .filter(|cmd| cmd.starts_with(&line[start..end])) + // .map(|x| Pair { + // display: x.to_string(), + // replacement: x.to_string(), + // }) + // .collect(); + // Ok((start, matches)) + } +} diff --git a/crates/repl/src/helper/highlighter.rs b/crates/repl/src/helper/highlighter.rs new file mode 100644 index 0000000..f2c9c6b --- /dev/null +++ b/crates/repl/src/helper/highlighter.rs @@ -0,0 +1,152 @@ +#![allow(unused)] +use std::borrow::Cow; +use std::fmt::Display; + +use colored::Colorize; +use regex::Regex; +use rustyline::highlight::Highlighter; + +pub struct SyntaxHighlighter { + pub regex: Regex, +} + +impl Default for SyntaxHighlighter { + fn default() -> Self { + Self::new() + } +} + +fn join(patterns: impl IntoIterator) -> String { + patterns + .into_iter() + .map(|pattern| pattern.to_string()) + .collect::>() + .join("|") +} + +fn capture_group(name: impl Display, pattern: impl Display) -> String { + format!(r"(?P<{name}>{pattern})") +} + +fn word(pattern: impl Display) -> String { + format!(r"\b(?:{pattern})\b") +} + +fn followed_by(a: impl Display, b: impl Display) -> String { + format!(r"{a} *{b}") +} + +fn maybe(a: impl Display) -> String { + format!(r"(?:{a})?") +} + +impl SyntaxHighlighter { + pub fn new() -> Self { + let pattern = &join([ + capture_group("keyword", word(join(KEYWORDS))), + capture_group("numeric", word(join(NUMERICS))), + capture_group("string", join(STRINGS)), + capture_group("builtin", word(join(BUILTINS))), + capture_group("comment", r"#.*"), + ]); + Self { + regex: Regex::new(pattern).unwrap(), + } + } +} + +impl Highlighter for SyntaxHighlighter { + fn highlight<'l>(&self, line: &'l str, _pos: usize) -> Cow<'l, str> { + self.regex.replace_all(line, |caps: ®ex::Captures| { + if let Some(s) = caps.name("keyword") { + s.as_str().color(KEYWORD_COLOR).bold().to_string() + } else if let Some(s) = caps.name("numeric") { + s.as_str().color(NUMERIC_COLOR).to_string() + } else if let Some(s) = caps.name("string") { + s.as_str().color(STRING_COLOR).to_string() + } else if let Some(s) = caps.name("builtin") { + s.as_str().color(BUILTIN_COLOR).bold().to_string() + } else if let Some(s) = caps.name("comment") { + s.as_str().color(COMMENT_COLOR).to_string() + } else { + unreachable!() + } + }) + } + + fn highlight_char(&self, line: &str, pos: usize, forced: bool) -> bool { + self.regex.is_match(line) + } +} + +pub const KEYWORDS: &[&str] = &[ + "mod", "and", "as", "break", "continue", "def", "desc", "else", "for", "from", "fun", "group", + "if", "in", "into", "join", "loop", "match", "not", "on", "or", "of", "return", "select", + "compute", "type", "val", "var", "where", "with", "while", "use", "union", "over", "roll", + "order", "enum", +]; + +pub const NUMERICS: &[&str] = &[ + "0[bB][0-1][_0-1]*", + "0[oO][0-7][_0-7]*", + "[0-9][_0-9]*", + "0[xX][0-9a-fA-F][_0-9a-fA-F]*", +]; + +pub const BUILTINS: &[&str] = &["true", "false"]; + +pub const STRINGS: &[&str] = &[r#""([^"\\]|\\.)*""#, r"'[^']'"]; + +pub const COMMENTS: &[&str] = &["#[^\r\n]*", "#[^\n]*"]; + +pub const TYPES: &[&str] = &[ + "i8", + "i16", + "i32", + "i64", + "i128", + "u8", + "u16", + "u32", + "u64", + "u128", + "f32", + "f64", + "Int", + "Float", + "bool", + "char", + "String", + "Vec", + "Option", + "Result", + "Set", + "Dict", + "Stream", + "Matrix", + "File", + "SocketAddr", + "Url", + "Path", + "Duration", + "Time", +]; + +use colored::Color; +use colored::Color::TrueColor; + +const fn rgb(r: u8, g: u8, b: u8) -> Color { + Color::TrueColor { r, g, b } +} + +pub const KEYWORD_COLOR: Color = rgb(0, 95, 135); +pub const MACRO_COLOR: Color = rgb(95, 135, 0); +pub const VAR_COLOR: Color = rgb(255, 0, 0); +pub const VAL_COLOR: Color = rgb(68, 68, 68); +pub const TYPE_COLOR: Color = rgb(0, 135, 0); +pub const DEF_COLOR: Color = rgb(0, 135, 175); +pub const NUMERIC_COLOR: Color = rgb(215, 95, 0); +pub const VARIANT_COLOR: Color = rgb(0, 135, 0); +pub const STRING_COLOR: Color = rgb(95, 135, 0); +pub const BUILTIN_COLOR: Color = rgb(0, 135, 0); +pub const COMMENT_COLOR: Color = rgb(135, 135, 135); diff --git a/crates/repl/src/helper/hinter.rs b/crates/repl/src/helper/hinter.rs new file mode 100644 index 0000000..12ed69e --- /dev/null +++ b/crates/repl/src/helper/hinter.rs @@ -0,0 +1,5 @@ +use rustyline::hint::Hinter; +use rustyline::Hinter; + +use super::Repl; + diff --git a/crates/repl/src/helper/mod.rs b/crates/repl/src/helper/mod.rs new file mode 100644 index 0000000..7a3fd37 --- /dev/null +++ b/crates/repl/src/helper/mod.rs @@ -0,0 +1,153 @@ +use std::borrow::Cow; + +pub mod completer; +pub mod highlighter; +pub mod validator; + +use colored::Color; +use colored::Color::Green; +use colored::Colorize; +use rustyline::completion::Completer; +use rustyline::completion::FilenameCompleter; +use rustyline::completion::Pair; +use rustyline::config::Configurer; +use rustyline::highlight::Highlighter; +use rustyline::highlight::MatchingBracketHighlighter; +use rustyline::hint::Hinter; +use rustyline::hint::HistoryHinter; +use rustyline::history::FileHistory; +use rustyline::validate::MatchingBracketValidator; +use rustyline::validate::ValidationContext; +use rustyline::validate::ValidationResult; +use rustyline::validate::ValidationResult::Incomplete; +use rustyline::validate::ValidationResult::Invalid; +use rustyline::validate::ValidationResult::Valid; +use rustyline::validate::Validator; +use rustyline::Cmd; +use rustyline::CompletionType; +use rustyline::EditMode; +use rustyline::Editor; +use rustyline::KeyCode; +use rustyline::KeyEvent; +use rustyline::Modifiers; +use rustyline::Result; + +use completer::KeywordCompleter; +use highlighter::SyntaxHighlighter; +use validator::StatementValidator; + +pub(crate) struct Helper { + validator1: MatchingBracketValidator, + validator2: StatementValidator, + completer1: FilenameCompleter, + // completer2: KeywordCompleter, + highlighter1: SyntaxHighlighter, + highlighter2: MatchingBracketHighlighter, + hinter: HistoryHinter, + pub(crate) prompt_color: Color, +} + +impl rustyline::Helper for Helper {} + +impl Default for Helper { + fn default() -> Self { + Self { + validator1: MatchingBracketValidator::new(), + validator2: StatementValidator::new(), + completer1: FilenameCompleter::new(), + // completer2: KeywordCompleter::new(), + highlighter1: SyntaxHighlighter::new(), + highlighter2: MatchingBracketHighlighter::new(), + hinter: HistoryHinter {}, + prompt_color: Green, + } + } +} + +impl Helper { + pub(crate) fn new() -> Self { + Self::default() + } +} + +impl Completer for Helper { + type Candidate = Pair; + + fn complete( + &self, + line: &str, + pos: usize, + ctx: &rustyline::Context<'_>, + ) -> Result<(usize, Vec)> { + self.completer1.complete(line, pos, ctx) + // let (start, matches) = self.completer1.complete(line, pos, ctx)?; + // if !matches.is_empty() { + // Ok((start, matches)) + // } else { + // self.completer2.complete(line, pos, ctx) + // } + } +} + +impl Validator for Helper { + fn validate(&self, ctx: &mut ValidationContext) -> Result { + if let r @ (Incomplete | Invalid(_)) = self.validator1.validate(ctx)? { + return Ok(r); + } + if let r @ (Incomplete | Invalid(_)) = self.validator2.validate(ctx)? { + return Ok(r); + } + Ok(Valid(None)) + } +} + +impl Highlighter for Helper { + fn highlight<'l>(&self, line: &'l str, pos: usize) -> Cow<'l, str> { + let line = self.highlighter1.highlight(line, pos); + match line { + Cow::Borrowed(line) => self.highlighter2.highlight(line, pos), + Cow::Owned(line) => match self.highlighter2.highlight(line.as_str(), pos) { + Cow::Borrowed(line) => Cow::Owned(line.to_string()), + Cow::Owned(line) => Cow::Owned(line), + }, + } + } + + fn highlight_prompt<'b, 's: 'b, 'p: 'b>( + &'s self, + prompt: &'p str, + default: bool, + ) -> Cow<'b, str> { + if default { + Cow::Owned(prompt.color(self.prompt_color).to_string()) + } else { + Cow::Borrowed(prompt) + } + } + + fn highlight_hint<'h>(&self, hint: &'h str) -> Cow<'h, str> { + Cow::Borrowed(hint) + } + + fn highlight_candidate<'c>( + &self, + candidate: &'c str, + completion: CompletionType, + ) -> Cow<'c, str> { + let _ = completion; + Cow::Borrowed(candidate) + } + + fn highlight_char(&self, line: &str, pos: usize, forced: bool) -> bool { + self.highlighter1.highlight_char(line, pos, forced) + || self.highlighter2.highlight_char(line, pos, forced) + } +} + +impl Hinter for Helper { + type Hint = String; + + fn hint(&self, line: &str, pos: usize, ctx: &rustyline::Context<'_>) -> Option { + self.hinter.hint(line, pos, ctx) + } +} diff --git a/crates/repl/src/helper/validator.rs b/crates/repl/src/helper/validator.rs new file mode 100644 index 0000000..333a5be --- /dev/null +++ b/crates/repl/src/helper/validator.rs @@ -0,0 +1,70 @@ +use colored::Color::Blue; +use colored::Colorize; +use rustyline::validate::ValidationContext; +use rustyline::validate::ValidationResult; +use rustyline::validate::Validator; +use rustyline::Result; + +#[derive(Default)] +pub struct StatementValidator; + +impl StatementValidator { + pub fn new() -> Self { + Self + } +} + +impl Validator for StatementValidator { + fn validate(&self, ctx: &mut ValidationContext) -> Result { + let input = ctx.input(); + let stmts = StatementIterator::new(input); + if (stmts.count() > 0 && input.ends_with(';')) || input.ends_with('\n') { + Ok(ValidationResult::Valid(None)) + } else if input.is_empty() { + Ok(ValidationResult::Invalid(Some( + " Enter statement".color(Blue).to_string(), + ))) + } else { + return Ok(ValidationResult::Incomplete); + } + } +} + +pub struct StatementIterator<'a> { + input: &'a str, +} + +impl<'a> StatementIterator<'a> { + pub fn new(input: &'a str) -> Self { + Self { + input: input.trim(), + } + } +} + +impl<'a> Iterator for StatementIterator<'a> { + type Item = &'a str; + + fn next(&mut self) -> Option { + let mut depth = 0; + let mut end = 0; + for (i, c) in self.input.char_indices() { + match c { + '(' | '{' | '[' => depth += 1, + ')' | '}' | ']' => depth -= 1, + ';' if depth == 0 => { + end = i; + break; + } + _ => continue, + } + } + if end == 0 { + None + } else { + let stmt = &self.input[..end + 1].trim(); + self.input = &self.input[end + 1..]; + Some(stmt) + } + } +} diff --git a/crates/repl/src/lib.rs b/crates/repl/src/lib.rs new file mode 100644 index 0000000..786ea1c --- /dev/null +++ b/crates/repl/src/lib.rs @@ -0,0 +1,142 @@ +#![allow(unused)] + +use compiler::ast::Program; +use compiler::Compiler; +use helper::validator::StatementIterator; + +use std::io; +use std::io::LineWriter; +use std::io::Write; +use std::process::exit; +use std::rc::Rc; + +use anyhow::Result; +use colored::Color; +use colored::Color::Blue; +use colored::Color::Green; +use colored::Color::Red; +use colored::Colorize; +use rustyline::completion::FilenameCompleter; +use rustyline::config::Configurer; +use rustyline::error::ReadlineError; +use rustyline::highlight::MatchingBracketHighlighter; +use rustyline::hint::HistoryHinter; +use rustyline::history::FileHistory; +use rustyline::validate::MatchingBracketValidator; +use rustyline::Cmd; +use rustyline::CompletionType; +use rustyline::EditMode; +use rustyline::Editor; +use rustyline::EventHandler; + +pub mod helper; +use crate::helper::Helper; + +use rustyline::history::MemHistory; +use rustyline::KeyCode; +use rustyline::KeyEvent; +use rustyline::Modifiers; + +#[derive(Debug)] +pub struct Repl { + pub(crate) count: usize, + pub(crate) editor: Editor, + pub(crate) compiler: Compiler, +} + +impl Drop for Repl { + fn drop(&mut self) { + self.editor.save_history(&self.compiler.config.history).ok(); + } +} + +impl Repl { + pub fn new(compiler: Compiler) -> Self { + let mut editor = Self::editor(); + if !compiler.config.history.exists() { + std::fs::create_dir_all(compiler.config.history.parent().unwrap()) + .expect("Unable to create history directory"); + std::fs::File::create(&compiler.config.history).expect("Unable to create history"); + } + editor.load_history(&compiler.config.history).ok(); + Self { + count: 0, + editor, + compiler, + } + } + + fn editor() -> Editor { + let mut editor = Editor::new().expect("Unable to create editor"); + editor.set_helper(Some(Helper::default())); + editor + .set_history_ignore_dups(true) + .expect("Unable to set history ignore dups"); + editor.set_edit_mode(EditMode::Vi); + editor.set_completion_type(CompletionType::List); + editor.bind_sequence(KeyEvent::ctrl('j'), Cmd::NextHistory); + editor.bind_sequence(KeyEvent::ctrl('k'), Cmd::PreviousHistory); + editor.bind_sequence(KeyEvent::ctrl('l'), Cmd::ClearScreen); + editor.bind_sequence(KeyEvent::ctrl('c'), Cmd::Interrupt); + editor.bind_sequence(KeyEvent::ctrl('v'), Cmd::YankPop); + editor.bind_sequence( + KeyEvent::ctrl('M'), + Cmd::AcceptOrInsertLine { + accept_in_the_middle: false, + }, + ); + editor.bind_sequence( + KeyEvent(KeyCode::Enter, Modifiers::CTRL), + Cmd::HistorySearchForward, + ); + editor + } + + pub(crate) fn color(&mut self, color: Color) { + self.editor.helper_mut().unwrap().prompt_color = color; + } + + pub(crate) fn readline(&mut self) -> std::result::Result { + self.count += 1; + self.editor.readline(">> ") + } + + pub fn run(&mut self, initial: Option) -> Result<()> { + self.color(Color::Green); + let mut stmts = Some(initial.iter().flat_map(|s| StatementIterator::new(s))); + loop { + let input = stmts + .as_mut() + .and_then(Iterator::next) + .map(|stmt| self.editor.readline_with_initial(">> ", (stmt, ""))) + .unwrap_or_else(|| self.editor.readline(">> ")); + match input { + Ok(input) => { + let input: Rc = Rc::from(input); + self.editor.add_history_entry(input.as_ref()); + match self.compiler.parse(self.count, input, |p| p.parse()) { + Ok(v) => { + println!("{v}"); + self.color(Green); + } + Err((_, s)) => { + println!("{s}"); + self.color(Red); + } + } + } + Err(ReadlineError::Interrupted) => { + stmts = None; + eprintln!("Interrupted"); + self.color(Red); + } + Err(ReadlineError::Eof) => break, + Err(err) => { + eprintln!("Error: {:?}", err); + break; + } + } + } + Ok(()) + } +} diff --git a/crates/runtime/.cargo/config.toml b/crates/runtime/.cargo/config.toml new file mode 100644 index 0000000..bff29e6 --- /dev/null +++ b/crates/runtime/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["--cfg", "tokio_unstable"] diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml new file mode 100644 index 0000000..cc14f3f --- /dev/null +++ b/crates/runtime/Cargo.toml @@ -0,0 +1,89 @@ +[package] +name = "runtime" +version.workspace = true +edition.workspace = true + +[features] +opt = ["itoa", "atoi", "ryu", "lexical-parse-float", "rustc-hash", "jemalloc", "btree-slab"] +# model = ["ort"] +default = ["opt"] + +[dependencies] +macros = { path = "../macros" } + +# rdkafka = { version = "0.36.2" } +tokio = { version = "1.36.0", features = ["full"] } +tracing = { version = "0.1.40" } +num = { version = "0.4.1" } +derive_more = { version = "0.99.17", features = ["deref", "deref_mut"], default-features = false } + +serde = { version = "1.0.197", features = ["derive", "rc"] } +serde_derive = { version = "1.0.197" } + +serde_json = { version = "1.0.114" } +tokio-stream = { version = "0.1.14" } +tokio-util = { version = "0.7.10", features = ["full"] } +futures = { version = "0.3.30" } + +csv-core = { version = "0.1.11" } + +time = { version = "0.3.34", features = ["serde-human-readable", "std", "macros"] } +# tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } + +# Optimisations + +# Smol +arrayvec = { version = "0.7.4" } +halfbrown = { version = "0.2.4" } +smallvec = "1.13.1" +smol_str = { version = "0.2.1", features = ["serde"] } + +# raw-cpuid = { version = "11.0.1", features = ["serde"] } +rustc-hash = { version = "1.1.0", optional = true } +ryu = { version = "1.0.17", optional = true } +itoa = { version = "1.0.10", optional = true } +lexical-parse-float = { version = "0.8.5", optional = true, default-features = false, features = ["compact"] } +atoi = { version = "2.0.0", optional = true, default-features = false } +smartstring = { version = "1.0.1", optional = true, features = ["serde"] } +btree-slab = { version = "0.6.1", optional = true } + +[target.'cfg(not(target_env = "msvc"))'.dependencies] +jemalloc = { version = "0.5.4", optional = true, package = "tikv-jemallocator" } + +# TODO: Extensions + +# url = { version = "2.5.0", features = ["serde"] } +# sled = { version = "0.34.7" } +# hyper = { version = "1.1.0" } +# once_cell = { version = "1.19.0" } +# ort = { version = "1.16.3" , optional = true } +# num-traits = { version = "0.2.17" } +# ndarray = { version = "0.15.6", features = ["serde"] } +# image = { version = "0.24.8" } + +[dev-dependencies] +criterion = "0.5.1" + +# String +smartstring = "1.0.1" +smol_str = "0.2.1" +smallstr = "0.3.0" +lasso = "0.7.2" + +# Serialisation +serde = { version = "1.0.197", features = ["derive", "rc"] } +ciborium = "0.2.2" # CBOR +rmp = "0.8.12" # MessagePack +flexbuffers = "2.0.0" # FlexBuffers + +# HashMap +halfbrown = "0.2.4" + +# Vec +arrayvec = "0.7.4" + +rand = "0.8.5" + +[[bench]] +name = "vec" +harness = false diff --git a/crates/runtime/benches/iter.rs b/crates/runtime/benches/iter.rs new file mode 100644 index 0000000..dc3d733 --- /dev/null +++ b/crates/runtime/benches/iter.rs @@ -0,0 +1,255 @@ + +// use criterion::{black_box, criterion_group, criterion_main, Criterion}; +// +// fn impl0(c: &mut Criterion) { +// c.bench_function("impl_iterator", |b| { +// b.iter(|| { +// let iter = (0..1_000_000).map(|x| x * 2); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn dyn0(c: &mut Criterion) { +// c.bench_function("boxed_iterator", |b| { +// b.iter(|| { +// let iter: Box> = Box::new((0..1_000_000).map(|x| x * 2)); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn eager0(c: &mut Criterion) { +// c.bench_function("eager_iterator", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .collect::>() +// .into_iter() +// .map(|x| x * 2); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn impl1(c: &mut Criterion) { +// c.bench_function("impl_iterator_complex", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .map(|x| x * 2) +// .filter(|&x| x % 3 == 0) +// .take(500) +// .enumerate() +// .map(|(i, x)| x + i as i32); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn dyn1(c: &mut Criterion) { +// c.bench_function("boxed_iterator_complex", |b| { +// b.iter(|| { +// let iter = Box::new((0..1_000_000).map(|x| x * 2)) as Box>; +// let iter = Box::new(iter.filter(|&x| x % 3 == 0)) as Box>; +// let iter = Box::new(iter.take(500)) as Box>; +// let iter = Box::new(iter.enumerate()) as Box>; +// let iter = Box::new(iter.map(|(i, x)| x + i as i32)) as Box>; +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn eager1(c: &mut Criterion) { +// c.bench_function("eager_iterator_complex", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .collect::>() +// .into_iter() +// .map(|x| x * 2) +// .collect::>() +// .into_iter() +// .filter(|&x| x % 3 == 0) +// .collect::>() +// .into_iter() +// .take(500) +// .collect::>() +// .into_iter() +// .enumerate() +// .collect::>() +// .into_iter() +// .map(|(i, x)| x + i as i32); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn impl2(c: &mut Criterion) { +// c.bench_function("impl_iterator_more_complex", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .map(|x| x * 2) +// .filter(|&x| x % 3 == 0) +// .take(500) +// .enumerate() +// .map(|(i, x)| x + i as i32) +// .skip(100) +// .zip(100..600) +// .fold(0, |acc, (a, b)| acc + a + b); +// black_box(iter); +// }); +// }); +// } +// +// fn dyn2(c: &mut Criterion) { +// c.bench_function("boxed_iterator_more_complex", |b| { +// b.iter(|| { +// let iter = Box::new(0..1_000_000) as Box>; +// let iter = Box::new(iter.map(|x| x * 2)) as Box>; +// let iter = Box::new(iter.filter(|&x| x % 3 == 0)) as Box>; +// let iter = Box::new(iter.take(500)) as Box>; +// let iter = Box::new(iter.enumerate()) as Box>; +// let iter = Box::new(iter.map(|(i, x)| x + i as i32)) as Box>; +// let iter = Box::new(iter.skip(100)) as Box>; +// let iter = Box::new(iter.zip(100..600)) as Box>; +// let result = iter.fold(0, |acc, (a, b)| acc + a + b); +// black_box(result); +// }); +// }); +// } +// +// fn eager2(c: &mut Criterion) { +// c.bench_function("eager_iterator_more_complex", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .collect::>() +// .into_iter() +// .map(|x| x * 2) +// .collect::>() +// .into_iter() +// .filter(|&x| x % 3 == 0) +// .collect::>() +// .into_iter() +// .take(500) +// .collect::>() +// .into_iter() +// .enumerate() +// .collect::>() +// .into_iter() +// .map(|(i, x)| x + i as i32) +// .collect::>() +// .into_iter() +// .skip(100) +// .collect::>() +// .into_iter() +// .zip(100..600) +// .collect::>() +// .into_iter() +// .fold(0, |acc, (a, b)| acc + a + b); +// black_box(iter); +// }); +// }); +// } +// +// fn impl3(c: &mut Criterion) { +// c.bench_function("impl_iterator_maps", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .map(|x| x * 2) +// .map(|x| x + 1) +// .map(|x| x * 3) +// .map(|x| x - 1) +// .map(|x| x / 2) +// .map(|x| x + 1) +// .map(|x| x * 3); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn f1(x: i32) -> i32 { +// x * 2 +// } +// fn f2(x: i32) -> i32 { +// x + 1 +// } +// fn f3(x: i32) -> i32 { +// x * 3 +// } +// fn f4(x: i32) -> i32 { +// x - 1 +// } +// fn f5(x: i32) -> i32 { +// x / 2 +// } +// fn f6(x: i32) -> i32 { +// x + 1 +// } +// fn f7(x: i32) -> i32 { +// x * 3 +// } +// fn impl_fn3(c: &mut Criterion) { +// c.bench_function("impl_iterator_maps", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .map(f1) +// .map(f2) +// .map(f3) +// .map(f4) +// .map(f5) +// .map(f6) +// .map(f7); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn dyn3(c: &mut Criterion) { +// c.bench_function("boxed_iterator_maps", |b| { +// b.iter(|| { +// let iter = Box::new(0..1_000_000) as Box>; +// let iter = Box::new(iter.map(|x| x * 2)) as Box>; +// let iter = Box::new(iter.map(|x| x + 1)) as Box>; +// let iter = Box::new(iter.map(|x| x * 3)) as Box>; +// let iter = Box::new(iter.map(|x| x - 1)) as Box>; +// let iter = Box::new(iter.map(|x| x / 2)) as Box>; +// let iter = Box::new(iter.map(|x| x + 1)) as Box>; +// let iter = Box::new(iter.map(|x| x * 3)) as Box>; +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// fn eager3(c: &mut Criterion) { +// c.bench_function("eager_iterator_maps", |b| { +// b.iter(|| { +// let iter = (0..1_000_000) +// .collect::>() +// .into_iter() +// .map(|x| x * 2) +// .collect::>() +// .into_iter() +// .map(|x| x + 1) +// .collect::>() +// .into_iter() +// .map(|x| x * 3) +// .collect::>() +// .into_iter() +// .map(|x| x - 1) +// .collect::>() +// .into_iter() +// .map(|x| x / 2) +// .collect::>() +// .into_iter() +// .map(|x| x + 1) +// .collect::>() +// .into_iter() +// .map(|x| x * 3); +// black_box(iter.collect::>()); +// }); +// }); +// } +// +// criterion_group!(g0, impl0, dyn0, eager0); +// criterion_group!(g1, impl1, dyn1, eager1); +// criterion_group!(g2, impl2, dyn2, eager2); +// criterion_group!(g3, impl3, dyn3, eager3, impl_fn3); +// criterion_main!(g0, g1, g2, g3); diff --git a/crates/runtime/benches/vec.rs b/crates/runtime/benches/vec.rs new file mode 100644 index 0000000..a268646 --- /dev/null +++ b/crates/runtime/benches/vec.rs @@ -0,0 +1,58 @@ +use criterion::black_box; +use criterion::criterion_group; +use criterion::criterion_main; +use criterion::Criterion; + +use std::cell::RefCell; +use std::rc::Rc; + +fn for_each_iter(c: &mut Criterion) { + c.bench_function("for_each_iter", |b| { + b.iter(|| { + let iter = 0..1_000_000; + iter.for_each(|x| { + black_box(x); + }); + }); + }); +} + +fn for_each_dyn_iter(c: &mut Criterion) { + c.bench_function("for_each_dyn_iter", |b| { + b.iter(|| { + let iter: Box> = Box::new(0..1_000_000); + iter.for_each(|x| { + black_box(x); + }); + }); + }); +} + +fn push_vec(c: &mut Criterion) { + c.bench_function("push_vec", |b| { + b.iter(|| { + let mut v = std::vec::Vec::::with_capacity(1_000_000); + for i in 0..1_000_000 { + let i = black_box(i); + v.push(i); + } + }); + }); +} + +fn push_rc_refcell_vec(c: &mut Criterion) { + c.bench_function("push_rc_refcell_vec", |b| { + b.iter(|| { + let v = Rc::new(RefCell::new(Vec::::with_capacity(1_000_000))); + for i in 0..1_000_000 { + let mut v = black_box(v.borrow_mut()); + let i = black_box(i); + v.push(i); + } + }); + }); +} + +criterion_group!(b0, for_each_iter, for_each_dyn_iter); +criterion_group!(b1, push_vec, push_rc_refcell_vec); +criterion_main!(b0, b1); diff --git a/crates/runtime/src/builtins/aggregator.rs b/crates/runtime/src/builtins/aggregator.rs new file mode 100644 index 0000000..08c04a1 --- /dev/null +++ b/crates/runtime/src/builtins/aggregator.rs @@ -0,0 +1,39 @@ +#![allow(unused)] + +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::vec::Vec; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[repr(C)] +pub enum Aggregator { + Incremental { + lift: F0, + combine: F1, + lower: F2, + }, + Holistic { + compute: F3, + }, +} + +impl Aggregator P, fn(P, P) -> P, fn(P) -> O, fn(Vec) -> O> { + pub fn incremental( + lift: fn(I) -> P, + combine: fn(P, P) -> P, + lower: fn(P) -> O, + ) -> Self { + Self::Incremental { + lift, + combine, + lower, + } + } +} + +impl Aggregator (), fn((), ()) -> (), fn() -> (), fn(Vec) -> O> { + pub fn holistic(compute: fn(Vec) -> O) -> Self { + Self::Holistic { compute } + } +} diff --git a/crates/runtime/src/builtins/array.rs b/crates/runtime/src/builtins/array.rs new file mode 100644 index 0000000..26ff21a --- /dev/null +++ b/crates/runtime/src/builtins/array.rs @@ -0,0 +1,130 @@ +use macros::Send; +use macros::Sync; +use macros::Unpin; + +use std::hash::Hash; +use std::marker::PhantomData; +use std::mem::MaybeUninit; + +use serde::de::SeqAccess; +use serde::de::Visitor; +use serde::ser::SerializeTuple; +use serde::Deserialize; +use serde::Deserializer; +use serde::Serialize; +use serde::Serializer; + +use crate::HashMap; +use crate::builtins::dict::Dict; +use crate::builtins::set::Set; +use crate::builtins::vec::Vec; +use crate::traits::DeepClone; + +#[derive(Clone, Debug, Send, Sync, Unpin, Eq, PartialEq, Hash)] +#[repr(C)] +pub struct Array(pub [T; N]); + +impl DeepClone for Array { + fn deep_clone(&self) -> Self { + let data = { + let mut data: [MaybeUninit; N] = unsafe { MaybeUninit::uninit().assume_init() }; + for (new, old) in data.iter_mut().zip(self.0.iter()) { + new.write(old.deep_clone()); + } + unsafe { std::mem::transmute_copy::<[MaybeUninit; N], [T; N]>(&data) } + }; + Array(data) + } +} + +impl Array { + pub fn new(data: [T; N]) -> Self { + Array(data) + } + + pub fn set(mut self, index: usize, value: T) -> Self { + self.0[index] = value; + self + } + + pub fn get(self, index: usize) -> T + where + T: Clone, + { + self.0[index].clone() + } + + pub fn into_vec(self) -> Vec + where + T: Clone, + { + Vec::from(self.0.to_vec()) + } + + pub fn into_set(self) -> Set + where + T: Clone + Hash + Eq, + { + Set::from(self.0.into_iter().collect::>()) + } +} + +impl Array<(K, V), N> +where + K: Clone + Eq + Hash, + V: Clone, +{ + pub fn into_dict(self) -> Dict + where + V: Clone, + { + Dict::from(self.0.into_iter().collect::>()) + } +} + +impl From<[T; N]> for Array { + fn from(data: [T; N]) -> Self { + Array(data) + } +} + +impl Serialize for Array { + fn serialize(&self, s: S) -> Result { + let mut s = s.serialize_tuple(N)?; + for item in &self.0 { + s.serialize_element(item)?; + } + s.end() + } +} + +impl<'de, T: Deserialize<'de>, const N: usize> Deserialize<'de> for Array { + fn deserialize>(d: D) -> Result, D::Error> { + Ok(Array(d.deserialize_tuple(N, ArrayVisitor(PhantomData))?)) + } +} + +struct ArrayVisitor(PhantomData); + +impl<'de, T: Deserialize<'de>, const N: usize> Visitor<'de> for ArrayVisitor { + type Value = [T; N]; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str(&format!("an array of length {}", N)) + } + + #[inline] + fn visit_seq>(self, mut seq: A) -> Result { + let mut data = std::vec::Vec::with_capacity(N); + for _ in 0..N { + match (seq.next_element())? { + Some(val) => data.push(val), + None => return Err(serde::de::Error::invalid_length(N, &self)), + } + } + match data.try_into() { + Ok(arr) => Ok(arr), + Err(_) => unreachable!(), + } + } +} diff --git a/crates/runtime/src/builtins/assigner.rs b/crates/runtime/src/builtins/assigner.rs new file mode 100644 index 0000000..6c0f787 --- /dev/null +++ b/crates/runtime/src/builtins/assigner.rs @@ -0,0 +1,36 @@ +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::duration::Duration; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[repr(C)] +pub enum Assigner { + Tumbling { length: Duration }, + Sliding { duration: Duration, step: Duration }, + Session { gap: Duration }, + Counting { length: i32 }, + Moving { length: i32, step: i32 }, +} + +impl Assigner { + pub fn tumbling(length: Duration) -> Self { + Self::Tumbling { length } + } + + pub fn sliding(length: Duration, step: Duration) -> Self { + Self::Sliding { duration: length, step } + } + + pub fn session(gap: Duration) -> Self { + Self::Session { gap } + } + + pub fn counting(length: i32) -> Self { + Self::Counting { length } + } + + pub fn moving(length: i32, step: i32) -> Self { + Self::Moving { length, step } + } +} diff --git a/crates/runtime/src/builtins/blob.rs b/crates/runtime/src/builtins/blob.rs new file mode 100644 index 0000000..b597883 --- /dev/null +++ b/crates/runtime/src/builtins/blob.rs @@ -0,0 +1,14 @@ +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::unchecked_cell::UncheckedCell; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[repr(C)] +pub struct Blob(pub(crate) UncheckedCell>); + +impl Blob { + pub fn new(bytes: std::vec::Vec) -> Self { + Self(UncheckedCell::new(bytes)) + } +} diff --git a/crates/runtime/src/builtins/cell.rs b/crates/runtime/src/builtins/cell.rs new file mode 100644 index 0000000..6418cc4 --- /dev/null +++ b/crates/runtime/src/builtins/cell.rs @@ -0,0 +1,51 @@ +use macros::DeepClone; +use macros::Send; +use macros::Sync; +use macros::Unpin; +use serde::Deserialize; +use serde::Serialize; + +use crate::traits::DeepClone; + +#[derive(DeepClone, Send, Sync, Unpin, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd)] +#[repr(C)] +pub struct Cell(pub std::rc::Rc>); + +impl Clone for Cell { + fn clone(&self) -> Self { + Cell(self.0.clone()) + } +} + +impl std::hash::Hash for Cell +where + T: std::hash::Hash, +{ + fn hash(&self, state: &mut H) { + self.0.borrow().hash(state); + } +} + +impl std::fmt::Debug for Cell { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.as_ref().fmt(f) + } +} + +impl Cell { + pub fn new(value: T) -> Cell { + Cell(std::rc::Rc::new(std::cell::RefCell::new(value))) + } + + pub fn as_mut(&self) -> std::cell::RefMut { + self.0.borrow_mut() + } + + pub fn as_ref(&self) -> std::cell::Ref { + self.0.borrow() + } + + pub fn share(&self) -> Self { + self.clone() + } +} diff --git a/crates/runtime/src/builtins/channel.rs b/crates/runtime/src/builtins/channel.rs new file mode 100644 index 0000000..943ee6a --- /dev/null +++ b/crates/runtime/src/builtins/channel.rs @@ -0,0 +1 @@ +pub mod spsc; diff --git a/crates/runtime/src/builtins/channel/spsc.rs b/crates/runtime/src/builtins/channel/spsc.rs new file mode 100644 index 0000000..cb6a5c5 --- /dev/null +++ b/crates/runtime/src/builtins/channel/spsc.rs @@ -0,0 +1,193 @@ +use derive_more::Deref; +use derive_more::DerefMut; +use std::cell::RefCell; +use std::collections::VecDeque; +use std::future::Future; +use std::pin::Pin; +use std::rc::Rc; +use std::task::Context; +use std::task::Poll; +use std::task::Waker; + +use arrayvec::ArrayVec; +use macros::Send; +use macros::Sync; +use macros::Unpin; + +pub fn channel(cap: usize) -> (Sender, Receiver) { + let channel = Channel(Rc::new(RefCell::new(ChannelInner { + buffer: VecDeque::with_capacity(cap), + waker: None, + }))); + (Sender(channel.clone()), Receiver(channel)) +} + +pub struct ChannelInner { + buffer: VecDeque, + waker: Option, +} + +#[derive(Deref, DerefMut)] +pub struct Channel(pub(crate) Rc>>); + +impl Clone for Channel { + fn clone(&self) -> Self { + Channel(self.0.clone()) + } +} + +#[derive(Send, Sync)] +pub struct Sender(pub(crate) Channel); + +impl Clone for Sender { + fn clone(&self) -> Self { + Sender(self.0.clone()) + } +} + +#[derive(Send, Sync, Deref)] +pub struct Receiver(pub(crate) Channel); + +impl Clone for Receiver { + fn clone(&self) -> Self { + Receiver(self.0.clone()) + } +} + +#[derive(Unpin)] +pub struct SenderFuture { + chan: Channel, + data: Option, +} + +#[derive(Unpin)] +pub struct BatchSenderFuture { + chan: Channel, + data: ArrayVec, +} + +#[derive(Unpin)] +pub struct ReceiverFuture { + chan: Channel, +} + +#[derive(Unpin)] +pub struct BatchReceiverFuture { + chan: Channel, +} + +impl Sender { + pub fn send(&self, data: T) -> SenderFuture { + SenderFuture { + chan: self.0.clone(), + data: Some(data), + } + } + + pub fn send_batch(&self, mut data: ArrayVec) -> BatchSenderFuture { + data.reverse(); + BatchSenderFuture { + chan: self.0.clone(), + data, + } + } +} + +impl Receiver { + pub fn recv(&self) -> ReceiverFuture { + ReceiverFuture { + chan: self.0.clone(), + } + } + pub fn recv_batch(&self) -> BatchReceiverFuture { + BatchReceiverFuture { + chan: self.0.clone(), + } + } +} + +impl Future for ReceiverFuture { + type Output = T; + + fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll { + let mut chan = self.chan.as_ref().borrow_mut(); + if let Some(data) = chan.buffer.pop_back() { + if let Some(waker) = chan.waker.take() { + waker.wake(); + } + Poll::Ready(data) + } else { + chan.waker = Some(cx.waker().clone()); + Poll::Pending + } + } +} + +impl Future for SenderFuture { + type Output = (); + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let this = self.as_mut().get_mut(); + let mut chan = this.chan.as_ref().borrow_mut(); + if chan.buffer.len() < chan.buffer.capacity() { + let data = this.data.take().unwrap(); + if let Some(waker) = chan.waker.take() { + waker.wake(); + } + chan.buffer.push_front(data); + Poll::Ready(()) + } else { + chan.waker = Some(cx.waker().clone()); + Poll::Pending + } + } +} + +impl Future for BatchReceiverFuture { + type Output = ArrayVec; + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll { + let this = self.as_mut().get_mut(); + let mut chan = this.chan.as_ref().borrow_mut(); + if !chan.buffer.is_empty() { + let mut data = ArrayVec::new(); + for _ in 0..N.min(chan.buffer.len()) { + data.push(chan.buffer.pop_back().unwrap()); + } + if let Some(waker) = chan.waker.take() { + waker.wake(); + } + Poll::Ready(data) + } else { + chan.waker = Some(cx.waker().clone()); + Poll::Pending + } + } +} + +impl Future for BatchSenderFuture { + type Output = (); + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let this = self.as_mut().get_mut(); + let mut chan = this.chan.as_ref().borrow_mut(); + let data = &mut this.data; + let (len, cap) = { (chan.buffer.len(), chan.buffer.capacity()) }; + if len < cap { + for _ in 0..data.len().min(len) { + chan.buffer.push_front(data.pop().unwrap()); + } + if let Some(waker) = chan.waker.take() { + waker.wake(); + } + if data.is_empty() { + Poll::Ready(()) + } else { + Poll::Pending + } + } else { + chan.waker = Some(cx.waker().clone()); + Poll::Pending + } + } +} diff --git a/crates/runtime/src/builtins/cow.rs b/crates/runtime/src/builtins/cow.rs new file mode 100644 index 0000000..fab7d96 --- /dev/null +++ b/crates/runtime/src/builtins/cow.rs @@ -0,0 +1,95 @@ +use runtime_macros::Send; +use runtime_macros::Share; +use runtime_macros::Sync; +use runtime_macros::Unpin; +use serde::Deserialize; +use serde::Serialize; + +use runtime_traits::Share; + +#[derive( + Share, Clone, Send, Sync, Unpin, Serialize, Deserialize, Eq, PartialEq, Hash, Ord, PartialOrd, +)] +#[repr(C)] +pub struct Cow(pub std::rc::Rc); + +impl std::fmt::Debug for Cow { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.as_ref().fmt(f) + } +} + +impl std::ops::Deref for Cow { + type Target = T; + + fn deref(&self) -> &Self::Target { + self.0.as_ref() + } +} + +impl AsRef for Cow { + fn as_ref(&self) -> &T { + self.0.as_ref() + } +} + +impl Cow { + /// Create a new cow. + pub fn new(value: T) -> Cow { + Cow(std::rc::Rc::new(value)) + } + + /// Copy the value of the cow. + pub fn copy(&self) -> T + where + T: Clone, + { + self.0.as_ref().clone() + } + + /// Take the value of the cow. If the cow is shared, it will be cloned. + pub fn take(self) -> T + where + T: Clone, + { + match std::rc::Rc::try_unwrap(self.0) { + Ok(this) => this, + Err(this) => this.as_ref().clone(), + } + } + + /// Update the value of the cow. If the cow is shared, it will be cloned. + pub fn update(&mut self, f: impl FnOnce(&mut T) -> O) -> O + where + T: Clone, + { + if let Some(this) = std::rc::Rc::get_mut(&mut self.0) { + f(this) + } else { + let mut this = self.copy(); + let o = f(&mut this); + self.0 = std::rc::Rc::new(this); + o + } + } + + /// Map the value of the cow. If the cow is shared, it will be cloned. + pub fn map(self, f: impl FnOnce(T) -> O) -> O + where + T: Clone, + { + match std::rc::Rc::try_unwrap(self.0) { + Ok(this) => f(this), + Err(this) => f(this.as_ref().clone()), + } + } + + /// Set the value of the cow. If the cow is shared, it will be cloned. + /// This is useful to prevent reallocating new cells. + pub fn set(&mut self, value: T) { + match std::rc::Rc::get_mut(&mut self.0) { + Some(this) => *this = value, + None => self.0 = std::rc::Rc::new(value), + } + } +} diff --git a/crates/runtime/src/builtins/dataflow.rs b/crates/runtime/src/builtins/dataflow.rs new file mode 100644 index 0000000..0794d35 --- /dev/null +++ b/crates/runtime/src/builtins/dataflow.rs @@ -0,0 +1,13 @@ +#[derive(Debug)] +pub struct Dataflow { + pub tx: tokio::sync::broadcast::Sender<()>, +} + +impl Dataflow { + pub fn new(tx: tokio::sync::broadcast::Sender<()>) -> Self { + Self { tx } + } + pub fn run(self) { + self.tx.send(()).unwrap(); + } +} diff --git a/crates/runtime/src/builtins/dataframe.rs b/crates/runtime/src/builtins/dataframe.rs new file mode 100644 index 0000000..511a975 --- /dev/null +++ b/crates/runtime/src/builtins/dataframe.rs @@ -0,0 +1,13 @@ +// use crate::cow::Cow; +// use crate::vec::Vec; +// +// pub struct DataFrame(pub Cow); +// +// pub struct Series(pub Cow); +// +// impl DataFrame { +// pub fn new(columns: Vec) -> Self { +// DataFrame(polars::prelude::DataFrame::new(columns.0.take())) +// } +// +// } diff --git a/crates/runtime/src/builtins/dict.rs b/crates/runtime/src/builtins/dict.rs new file mode 100644 index 0000000..9da0b10 --- /dev/null +++ b/crates/runtime/src/builtins/dict.rs @@ -0,0 +1,73 @@ +// use std::borrow::Borrow; +use std::hash::Hash; + +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::unchecked_cell::UncheckedCell; +use crate::traits::Data; +use crate::traits::DeepClone; +use crate::traits::Key; +use crate::HashMap; + +#[derive(Default, Clone, Debug, Serialize, Deserialize, Eq, PartialEq)] +#[repr(C)] +pub struct Dict(pub(crate) UncheckedCell>); + +impl DeepClone for Dict { + fn deep_clone(&self) -> Self { + todo!() + // let map = self + // .0 + // .iter() + // .map(|(k, v)| (k.deep_clone(), v.deep_clone())) + // .collect(); + // Dict(map) + } +} + +impl Dict { + pub fn new() -> Dict { + Dict(UncheckedCell::new(HashMap::default())) + } + + pub fn get(&self, key: impl std::borrow::Borrow) -> Option + where + K: Clone, + V: Clone, + { + self.0.get(key.borrow()).cloned() + } + + pub fn insert(&self, key: K, val: V) + where + K: Clone, + V: Clone, + { + // Safety: This is an atomic operation. + unsafe { + self.0.as_mut_unchecked().insert(key, val); + } + } + + pub fn remove(&self, key: impl std::borrow::Borrow) + where + K: Clone, + V: Clone, + { + // Safety: This is an atomic operation. + unsafe { + self.0.as_mut_unchecked().remove(key.borrow()); + } + } + + pub fn contains_key(&self, key: impl std::borrow::Borrow) -> bool { + self.0.contains_key(key.borrow()) + } +} + +impl From> for Dict { + fn from(map: HashMap) -> Self { + Dict(UncheckedCell::new(map)) + } +} diff --git a/crates/runtime/src/builtins/duration.rs b/crates/runtime/src/builtins/duration.rs new file mode 100644 index 0000000..8fd7490 --- /dev/null +++ b/crates/runtime/src/builtins/duration.rs @@ -0,0 +1,86 @@ +use serde::Deserialize; +use serde::Serialize; + +#[derive(Clone, Copy, Serialize, Deserialize, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +#[repr(C)] +pub struct Duration(pub time::Duration); + +impl Duration { + pub const fn zero() -> Self { + Self::from_seconds(0) + } + + pub const fn from_weeks(weeks: i64) -> Self { + Self(time::Duration::weeks(weeks)) + } + + pub const fn from_days(days: i64) -> Self { + Self(time::Duration::days(days)) + } + + pub const fn from_hours(hours: i64) -> Self { + Self(time::Duration::hours(hours)) + } + + pub const fn from_minutes(minutes: i64) -> Self { + Self(time::Duration::minutes(minutes)) + } + + pub const fn from_seconds(seconds: i64) -> Self { + Self(time::Duration::seconds(seconds)) + } + + pub const fn from_milliseconds(milliseconds: i64) -> Self { + Self(time::Duration::milliseconds(milliseconds)) + } + + pub const fn from_microseconds(microseconds: i64) -> Self { + Self(time::Duration::microseconds(microseconds)) + } + + pub const fn from_nanoseconds(nanoseconds: i64) -> Self { + Self(time::Duration::nanoseconds(nanoseconds)) + } + + pub fn seconds(self) -> i64 { + self.0.whole_seconds() + } + + pub fn milliseconds(self) -> i128 { + self.0.whole_milliseconds() + } + + pub fn microseconds(self) -> i128 { + self.0.whole_microseconds() + } + + pub fn nanoseconds(self) -> i128 { + self.0.whole_nanoseconds() + } + + pub fn days(self) -> i64 { + self.0.whole_days() + } + + pub fn hours(self) -> i64 { + self.0.whole_hours() + } + + pub fn weeks(self) -> i64 { + self.0.whole_weeks() + } + + pub(crate) fn to_std(self) -> std::time::Duration { + let whole_seconds = self.0.whole_seconds() as u64; + let subsec_nanos = self.0.subsec_nanoseconds() as u32; + std::time::Duration::new(whole_seconds, subsec_nanos) + } +} + +impl std::ops::Rem for Duration { + type Output = Self; + + fn rem(self, rhs: Self) -> Self { + Duration::from_seconds(self.seconds() % rhs.seconds()) + } +} diff --git a/crates/runtime/src/builtins/encoding.rs b/crates/runtime/src/builtins/encoding.rs new file mode 100644 index 0000000..956db6b --- /dev/null +++ b/crates/runtime/src/builtins/encoding.rs @@ -0,0 +1,18 @@ +use serde::Deserialize; +use serde::Serialize; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[repr(C)] +pub enum Encoding { + Csv { sep: char }, + Json, +} + +impl Encoding { + pub fn csv(sep: char) -> Self { + Self::Csv { sep } + } + pub fn json() -> Self { + Self::Json + } +} diff --git a/crates/runtime/src/builtins/file.rs b/crates/runtime/src/builtins/file.rs new file mode 100644 index 0000000..efaa686 --- /dev/null +++ b/crates/runtime/src/builtins/file.rs @@ -0,0 +1,33 @@ +use std::io::Read; + +use crate::builtins::blob::Blob; +use crate::builtins::path::Path; +use crate::builtins::string::String; + +#[derive(Debug, Clone)] +#[repr(C)] +pub struct File(pub std::rc::Rc>); + +impl File { + pub fn open(path: impl Into) -> Self { + File::from(std::fs::File::open(path.into().0).unwrap()) + } + + pub fn read_to_string(self) -> String { + let mut string = std::string::String::new(); + self.0.borrow_mut().read_to_string(&mut string).unwrap(); + String::from(string) + } + + pub fn read_to_bytes(self) -> Blob { + let mut vec = std::vec::Vec::new(); + self.0.borrow_mut().read_to_end(&mut vec).unwrap(); + Blob::new(vec) + } +} + +impl From for File { + fn from(file: std::fs::File) -> Self { + Self(std::rc::Rc::new(std::cell::RefCell::new(file))) + } +} diff --git a/crates/runtime/src/builtins/im_string.rs b/crates/runtime/src/builtins/im_string.rs new file mode 100644 index 0000000..af399fa --- /dev/null +++ b/crates/runtime/src/builtins/im_string.rs @@ -0,0 +1,50 @@ +use serde_derive::Deserialize; +use serde_derive::Serialize; + +use crate::traits::DeepClone; +use smol_str::SmolStr; + +#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)] +pub struct String(pub(crate) smol_str::SmolStr); + +impl PartialEq for String { + #[inline(always)] + fn eq(&self, other: &str) -> bool { + self.0 == other + } +} + +impl<'a> PartialEq<&'a str> for String { + #[inline(always)] + fn eq(&self, other: &&'a str) -> bool { + self.0 == *other + } +} + +impl DeepClone for String { + #[inline(always)] + fn deep_clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl String { + #[inline(always)] + pub fn new>(s: T) -> Self { + Self(SmolStr::from(s.as_ref())) + } +} + +impl<'a> From<&'a str> for String { + #[inline(always)] + fn from(s: &'a str) -> Self { + Self(SmolStr::from(s)) + } +} + +impl From for String { + #[inline(always)] + fn from(s: std::string::String) -> Self { + Self(SmolStr::from(s)) + } +} diff --git a/crates/runtime/src/builtins/image.rs b/crates/runtime/src/builtins/image.rs new file mode 100644 index 0000000..f9f08a8 --- /dev/null +++ b/crates/runtime/src/builtins/image.rs @@ -0,0 +1,192 @@ +use image::io::Reader; +use image::DynamicImage; +use image::GenericImage; +use image::GenericImageView; +use image::ImageFormat; +use ndarray::ArrayBase; +use serde::Deserialize; +use serde::Deserializer; +use serde::Serialize; +use serde::Serializer; +use std::io::Cursor; + +use crate::builtins::array::Array; +use crate::builtins::blob::Blob; +use crate::builtins::cell::Cell; +use crate::builtins::matrix::Matrix; +use crate::builtins::path::Path; +use crate::traits::Share; + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[repr(C)] +pub struct Image(pub Cell); + +#[derive(Clone, Debug)] +pub struct Inner(pub DynamicImage); + +impl std::ops::Deref for Inner { + type Target = DynamicImage; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl std::ops::DerefMut for Inner { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl Share for Inner { + fn share(&self) -> Self { + Self(self.0.clone()) + } +} + +impl Serialize for Inner { + fn serialize(&self, serializer: S) -> Result { + let mut bytes = std::vec::Vec::new(); + self.0 + .write_to(&mut Cursor::new(&mut bytes), ImageFormat::Png) + .unwrap(); + serializer.serialize_bytes(&bytes) + } +} + +impl<'de> Deserialize<'de> for Inner { + fn deserialize>(deserializer: D) -> Result { + let bytes = std::vec::Vec::::deserialize(deserializer)?; + let image = Reader::new(Cursor::new(bytes)) + .with_guessed_format() + .unwrap() + .decode() + .unwrap(); + Ok(Self(image)) + } +} + +impl Image { + pub fn new(data: Blob) -> Image { + let rd = Reader::new(Cursor::new(data.0.as_slice())) + .with_guessed_format() + .expect("Unknown image format"); + let img = rd.decode().expect("Failed to decode image"); + Image::from(img) + } + + pub fn crop(self, x: u32, y: u32, new_w: u32, new_h: u32) -> Self { + Image::from(self.0.crop_imm(x, y, new_w, new_h)) + } + + pub fn center_crop(self, new_w: u32, new_h: u32) -> Self { + let old_w = self.0.width(); + let old_h = self.0.height(); + self.crop((old_w - new_w) / 2, (old_h - new_h) / 2, new_w, new_h) + } + + pub fn resize(self, new_w: u32, new_h: u32) -> Self { + Image(Cell::new(Inner(self.0.resize_exact( + new_w, + new_h, + image::imageops::FilterType::Nearest, + )))) + } + + pub fn resize_width(self, new_w: u32) -> Self { + let old_w = self.0.width(); + let old_h = self.0.height(); + let new_h = (old_h as f32 * (new_w as f32 / old_w as f32)) as u32; + self.resize(new_w, new_h) + } + + pub fn resize_height(self, new_h: u32) -> Self { + let old_w = self.0.width(); + let old_h = self.0.height(); + let new_w = (old_w as f32 * (new_h as f32 / old_h as f32)) as u32; + self.resize(new_w, new_h) + } + + pub fn into_matrix(self) -> Matrix { + let w = self.0.width() as usize; + let h = self.0.height() as usize; + let mut array = ArrayBase::zeros(vec![3, w, h]); + for (x, y, rgb) in self.0.pixels() { + let x = x as usize; + let y = y as usize; + array[[0, x, y]] = rgb[0] as f32; + array[[1, x, y]] = rgb[1] as f32; + array[[2, x, y]] = rgb[2] as f32; + } + Matrix::from(array) + } + + pub fn into_matrix_rgba(self) -> Matrix { + let w = self.0.width() as usize; + let h = self.0.height() as usize; + let mut array = ArrayBase::zeros(vec![4, w, h]); + for (x, y, rgb) in self.0.pixels() { + let x = x as usize; + let y = y as usize; + array[[0, x, y]] = rgb[0] as f32; + array[[1, x, y]] = rgb[1] as f32; + array[[2, x, y]] = rgb[2] as f32; + array[[3, x, y]] = rgb[3] as f32; + } + Matrix::from(array) + } + + pub fn from_matrix(matrix: Matrix) -> Self { + let w = matrix.0.shape()[1]; + let h = matrix.0.shape()[2]; + let mut img = DynamicImage::new_rgb8(w as u32, h as u32); + for x in 0..w { + for y in 0..h { + img.put_pixel( + x as u32, + y as u32, + image::Rgba([ + matrix.0[[0, x, y]] as u8, + matrix.0[[1, x, y]] as u8, + matrix.0[[2, x, y]] as u8, + matrix.0[[3, x, y]] as u8, + ]), + ); + } + } + Image::from(img) + } + + pub fn save(self, path: Path) { + self.0.save(path.0).unwrap(); + } + + pub fn height(self) -> u32 { + self.0.height() + } + + pub fn width(self) -> u32 { + self.0.width() + } + + pub fn draw_box(mut self, x: u32, y: u32, w: u32, h: u32, rgba: Array) { + let rgba = rgba.0.into(); + if x + w >= self.0.width() || y + h >= self.0.height() { + panic!("Box out of bounds"); + } + for i in 0..w { + self.0.put_pixel(x + i, y, rgba); + self.0.put_pixel(x + i, y + h, rgba); + } + for i in 0..h { + self.0.put_pixel(x, y + i, rgba); + self.0.put_pixel(x + w, y + i, rgba); + } + } +} + +impl From for Image { + fn from(image: DynamicImage) -> Self { + Image(Cell::new(Inner(image))) + } +} diff --git a/crates/runtime/src/builtins/keyed_stream.rs b/crates/runtime/src/builtins/keyed_stream.rs new file mode 100644 index 0000000..5ef3e5c --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream.rs @@ -0,0 +1,53 @@ +mod drain; +mod filter; +mod flat_map; +mod fork; +pub mod incr_window; +mod join; +mod keyby; +mod map; +mod merge; +mod scan; +mod sink; +mod unkey; +mod window; + +use tokio::sync::mpsc::Receiver; +use tokio::sync::mpsc::Sender; + +use crate::builtins::time::Time; +use crate::traits::Data; +use crate::traits::Key; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Debug, Serialize, Deserialize)] +pub enum KeyedEvent { + Data(Time, K, T), + Watermark(Time), + Snapshot(usize), + Sentinel, +} + +pub struct KeyedStream(pub(crate) Receiver>); + +pub struct KeyedCollector(pub(crate) Sender>); + +impl KeyedStream { + pub async fn recv(&mut self) -> KeyedEvent { + self.0.recv().await.unwrap_or(KeyedEvent::Sentinel) + } +} + +impl KeyedCollector { + pub async fn send(&self, event: KeyedEvent) { + self.0.send(event).await.ok(); + } +} + +impl KeyedStream { + pub(crate) fn new() -> (KeyedCollector, KeyedStream) { + let (tx, rx) = tokio::sync::mpsc::channel(100); + (KeyedCollector(tx), KeyedStream(rx)) + } +} diff --git a/crates/runtime/src/builtins/keyed_stream/drain.rs b/crates/runtime/src/builtins/keyed_stream/drain.rs new file mode 100644 index 0000000..84fd22d --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream/drain.rs @@ -0,0 +1,18 @@ +use crate::runner::context::Context; +use crate::traits::Data; +use crate::traits::Key; + +use super::KeyedEvent; +use super::KeyedStream; + +impl KeyedStream { + pub fn drain(mut self, ctx: &mut Context) { + ctx.sink(|| async move { + loop { + if let KeyedEvent::Sentinel = self.recv().await { + break; + } + } + }); + } +} diff --git a/crates/runtime/src/builtins/keyed_stream/filter.rs b/crates/runtime/src/builtins/keyed_stream/filter.rs new file mode 100644 index 0000000..526c4be --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream/filter.rs @@ -0,0 +1,28 @@ +use crate::runner::context::Context; +use crate::traits::Data; +use crate::traits::Key; + +use super::KeyedEvent; +use super::KeyedStream; + +impl KeyedStream { + pub fn filter(mut self, ctx: &mut Context, f: fn(&T) -> bool) -> KeyedStream { + ctx.keyed_operator(|tx| async move { + loop { + match self.recv().await { + KeyedEvent::Data(t, k, v) => { + if f(&v) { + tx.send(KeyedEvent::Data(t, k, v)).await; + } + } + KeyedEvent::Watermark(t) => tx.send(KeyedEvent::Watermark(t)).await, + KeyedEvent::Snapshot(i) => tx.send(KeyedEvent::Snapshot(i)).await, + KeyedEvent::Sentinel => { + tx.send(KeyedEvent::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/keyed_stream/flat_map.rs b/crates/runtime/src/builtins/keyed_stream/flat_map.rs new file mode 100644 index 0000000..9f76d68 --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream/flat_map.rs @@ -0,0 +1,36 @@ +use crate::builtins::vec::Vec; +use crate::runner::context::Context; +use crate::traits::Data; +use crate::traits::Key; + +use super::KeyedEvent; +use super::KeyedStream; + +impl KeyedStream +where + K: Key, + T: Data, +{ + pub fn flat_map(mut self, ctx: &mut Context, f: fn(T) -> Vec) -> KeyedStream + where + O: Data, + { + ctx.keyed_operator(|tx| async move { + loop { + match self.recv().await { + KeyedEvent::Data(t, k, v) => { + for v in f(v).iter() { + tx.send(KeyedEvent::Data(t, k.deep_clone(), v)).await; + } + } + KeyedEvent::Watermark(t) => tx.send(KeyedEvent::Watermark(t)).await, + KeyedEvent::Snapshot(i) => tx.send(KeyedEvent::Snapshot(i)).await, + KeyedEvent::Sentinel => { + tx.send(KeyedEvent::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/keyed_stream/fork.rs b/crates/runtime/src/builtins/keyed_stream/fork.rs new file mode 100644 index 0000000..28cf2de --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream/fork.rs @@ -0,0 +1,43 @@ +use crate::runner::context::Context; +use crate::traits::Data; +use crate::traits::Key; + +use super::KeyedEvent; +use super::KeyedStream; + +impl KeyedStream { + pub fn split(mut self, ctx: &mut Context) -> (Self, Self) { + ctx.keyed_co_operator(|tx1, tx2| async move { + loop { + match self.recv().await { + KeyedEvent::Data(t, k1, v1) => { + let k2 = k1.deep_clone(); + let v2 = v1.deep_clone(); + tokio::join!( + tx1.send(KeyedEvent::Data(t, k2, v2)), + tx2.send(KeyedEvent::Data(t, k1, v1)), + ) + } + KeyedEvent::Watermark(t) => { + tokio::join!( + tx1.send(KeyedEvent::Watermark(t)), + tx2.send(KeyedEvent::Watermark(t)) + ) + } + KeyedEvent::Snapshot(i) => { + tokio::join!( + tx1.send(KeyedEvent::Snapshot(i)), + tx2.send(KeyedEvent::Snapshot(i)) + ) + } + KeyedEvent::Sentinel => { + tokio::join!( + tx1.send(KeyedEvent::Sentinel), + tx2.send(KeyedEvent::Sentinel) + ) + } + }; + } + }) + } +} diff --git a/crates/runtime/src/builtins/keyed_stream/incr_window.rs b/crates/runtime/src/builtins/keyed_stream/incr_window.rs new file mode 100644 index 0000000..82098c4 --- /dev/null +++ b/crates/runtime/src/builtins/keyed_stream/incr_window.rs @@ -0,0 +1,107 @@ +use crate::HashMap; +use crate::BTreeMap; + +use std::collections::hash_map::Entry; +use std::ops::Range; + +use crate::builtins::assigner::Assigner; +use crate::builtins::duration::Duration; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; +use crate::traits::Key; + +use super::KeyedEvent; +use super::KeyedStream; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct Properties { + pub associative: bool, + pub commutative: bool, +} + +impl KeyedStream { + pub fn incr_window( + self, + ctx: &mut Context, + assigner: Assigner, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, P) -> P + Send + 'static, + lower: impl Fn(K, &P, Range { + ctx.operator(|tx| async move { + let mut acc = init; + loop { + match self.recv().await { + Event::Data(t, v) => { + acc = fun(v, acc); + tx.send(Event::Data(t, acc.deep_clone())).await; + } + Event::Watermark(t) => { + tx.send(Event::Watermark(t)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/sink.rs b/crates/runtime/src/builtins/stream/sink.rs new file mode 100644 index 0000000..d6f6a1e --- /dev/null +++ b/crates/runtime/src/builtins/stream/sink.rs @@ -0,0 +1,161 @@ +#![allow(unused)] +use futures::SinkExt; +use tokio::io::AsyncWriteExt; +use tokio::io::BufWriter; + +use crate::builtins::encoding::Encoding; +use crate::builtins::path::Path; +use crate::builtins::socket::SocketAddr; +// use crate::builtins::url::Url; +use crate::builtins::writer::Writer; +use crate::formats::Encode; +use crate::runner::context::Context; +use crate::traits::Data; + +use super::Event; +use super::Stream; + +impl Stream { + pub fn sink(self, ctx: &mut Context, writer: Writer, encoding: Encoding) { + let mut this = self; + let (tx, rx) = tokio::sync::mpsc::channel(100); + ctx.sink(|| async move { + loop { + let event = this.recv().await; + match event { + Event::Data(_, data) => tx.send(data).await.unwrap(), + Event::Watermark(_) => continue, + Event::Snapshot(_) => todo!(), + Event::Sentinel => break, + } + } + }); + Self::sink_encoding(ctx, rx, writer, encoding); + } + + // async fn write_http( + // rx: tokio::sync::mpsc::Receiver, + // url: Url, + // encoder: impl Encode + 'static, + // ) { + // todo!() + // let uri: Uri = url.0.to_string().parse().unwrap(); + // let client = hyper::Client::new(); + // let (mut tx1, rx1) = futures::channel::mpsc::channel(100); + // let req = Request::builder() + // .method(Method::POST) + // .uri(uri) + // .header("content-type", encoder.content_type()) + // .body(Body::wrap_stream(rx1)) + // .unwrap(); + // client.request(req).await.unwrap(); + // let mut buf = vec![0; 1024]; + // loop { + // match rx.recv().await { + // Some(data) => match encoder.encode(&data, &mut buf) { + // Ok(n) => { + // tracing::info!("Encoded: {:?}", data); + // let bytes: Result<_, std::io::Error> = + // Ok(hyper::body::Bytes::from(buf[0..n].to_vec())); + // tx1.send(bytes).await.unwrap(); + // } + // Err(e) => tracing::info!("Failed to encode: {}", e), + // }, + // None => break, + // } + // } + // } + + async fn write_pipe( + mut rx: tokio::sync::mpsc::Receiver, + mut encoder: impl Encode + Send + 'static, + tx: impl AsyncWriteExt + Unpin, + ) { + let mut tx = BufWriter::new(tx); + let mut buf = vec![0; 1024]; + loop { + match rx.recv().await { + Some(data) => match encoder.encode(&data, &mut buf) { + Ok(n) => { + tracing::info!("Encoded: {:?}", data); + tx.write_all(&buf[0..n]).await.unwrap(); + } + Err(e) => tracing::info!("Failed to encode: {}", e), + }, + None => { + tx.flush().await.unwrap(); + break; + } + } + } + } + + async fn write_file( + rx: tokio::sync::mpsc::Receiver, + path: Path, + encoder: impl Encode + Send + 'static, + ) { + match tokio::fs::File::create(&path.0).await { + Ok(tx) => Self::write_pipe(rx, encoder, tx).await, + Err(e) => panic!("Failed to open file `{}`: {}", path.0.display(), e), + } + } + + async fn write_socket( + mut rx: tokio::sync::mpsc::Receiver, + addr: SocketAddr, + mut encoder: impl Encode + 'static, + ) { + tracing::info!("Connecting to {}", addr.0); + let socket = tokio::net::TcpStream::connect(addr.0).await.unwrap(); + tracing::info!("Connected to {}", addr.0); + let mut tx = tokio_util::codec::Framed::new(socket, tokio_util::codec::LinesCodec::new()); + let mut buf = vec![0; 1024]; + while let Some(data) = rx.recv().await { + match encoder.encode(&data, &mut buf) { + Ok(n) => { + tracing::info!("Encoded: {:?}", data); + let s = std::str::from_utf8(&buf[0..n - 1]).unwrap(); // -1 to remove trailing newline + tracing::info!("Sending: [{}]", s); + tx.send(s).await.unwrap(); + } + Err(e) => tracing::info!("Failed to encode: {}", e), + } + } + } + + fn sink_encoding( + ctx: &mut Context, + rx: tokio::sync::mpsc::Receiver, + writer: Writer, + encoding: Encoding, + ) { + match encoding { + Encoding::Csv { sep } => { + let encoder = crate::formats::csv::ser::Writer::new(sep); + Self::sink_writer(ctx, rx, writer, encoder); + } + Encoding::Json => { + let encoder = crate::formats::json::ser::Writer::new(); + Self::sink_writer(ctx, rx, writer, encoder); + } + } + } + + fn sink_writer( + ctx: &mut Context, + rx: tokio::sync::mpsc::Receiver, + writer: Writer, + encoder: impl Encode + Send + 'static, + ) { + ctx.spawn(async move { + match writer { + Writer::Stdout => Self::write_pipe(rx, encoder, tokio::io::stdout()).await, + Writer::File { path } => Self::write_file(rx, path, encoder).await, + // Writer::Http { url } => Self::write_http(rx, url, encoder).await, + Writer::Tcp { addr } => Self::write_socket(rx, addr, encoder).await, + Writer::Kafka { addr: _, topic: _ } => todo!(), + } + }); + } +} diff --git a/crates/runtime/src/builtins/stream/source.rs b/crates/runtime/src/builtins/stream/source.rs new file mode 100644 index 0000000..93bf6a3 --- /dev/null +++ b/crates/runtime/src/builtins/stream/source.rs @@ -0,0 +1,245 @@ +use crate::formats::Decode; +use crate::runner::context::Context; + +use time::OffsetDateTime; +use tokio::io::AsyncBufReadExt; +use tokio::io::AsyncReadExt; +use tokio::io::BufReader; +use tokio_stream::StreamExt; + +use crate::builtins::duration::Duration; +use crate::builtins::encoding::Encoding; +use crate::builtins::path::Path; +use crate::builtins::reader::Reader; +use crate::builtins::socket::SocketAddr; +use crate::builtins::stream::Event; +use crate::builtins::time::Time; +use crate::builtins::time_source::TimeSource; +// use crate::builtins::url::Url; +use crate::traits::Data; + +use super::Stream; + +impl Stream { + pub fn source( + ctx: &mut Context, + reader: Reader, + encoding: Encoding, + time_source: TimeSource Time + Send + 'static>, + ) -> Stream { + Self::source_encoding(ctx, reader, encoding, time_source) + } + + fn source_encoding( + ctx: &mut Context, + reader: Reader, + encoding: Encoding, + time_source: TimeSource Time + Send + 'static>, + ) -> Stream { + match encoding { + Encoding::Csv { sep } => { + let decoder = crate::formats::csv::de::Reader::<1024>::new(sep); + Self::sink_reader(ctx, reader, decoder, time_source) + } + Encoding::Json => { + let decoder = crate::formats::json::de::Reader::new(); + Self::sink_reader(ctx, reader, decoder, time_source) + } + } + } + + async fn read_pipe( + rx: impl AsyncReadExt + Unpin, + mut decoder: impl Decode + 'static, + watch: bool, + tx: tokio::sync::mpsc::Sender, + ) { + let mut rx = BufReader::with_capacity(1024 * 30, rx); + let mut buf = Vec::with_capacity(1024 * 30); + loop { + match rx.read_until(b'\n', &mut buf).await { + Ok(0) => { + tracing::info!("EOF"); + if watch { + tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; + } else { + break; + } + } + Ok(n) => match decoder.decode(&buf[0..n]) { + Ok(data) => { + tracing::info!("Decoded: {:?}", data); + tx.send(data).await.unwrap(); + buf.clear(); + } + Err(e) => tracing::info!("Failed to decode: {}", e), + }, + Err(e) => panic!("Failed to read from stdin: {}", e), + } + } + } + + async fn read_file( + path: Path, + decoder: impl Decode + 'static, + watch: bool, + tx2: tokio::sync::mpsc::Sender, + ) { + match tokio::fs::File::open(&path.0).await { + Ok(rx) => Self::read_pipe(rx, decoder, watch, tx2).await, + Err(e) => panic!("Failed to open file `{}`: {}", path.0.display(), e), + } + } + + async fn read_socket( + addr: SocketAddr, + mut decoder: impl Decode + 'static, + tx: tokio::sync::mpsc::Sender, + ) { + tracing::info!("Trying to listen on {}", addr.0); + let socket = tokio::net::TcpListener::bind(addr.0).await.unwrap(); + tracing::info!("Listening on {}", addr.0); + let (socket, _) = socket.accept().await.unwrap(); + tracing::info!("Accepted connection from {}", addr.0); + let mut rx = tokio_util::codec::Framed::new(socket, tokio_util::codec::LinesCodec::new()); + loop { + match rx.next().await { + Some(Ok(line)) => match decoder.decode(line.as_bytes()) { + Ok(data) => { + tracing::info!("Decoded: {:?}", data); + tx.send(data).await.unwrap() + } + Err(e) => tracing::info!("Failed to decode: {}", e), + }, + Some(Err(e)) => tracing::info!("Failed to read: {}", e), + None => break, + } + } + } + + // #[allow(unused)] + // async fn read_http(url: Url, decoder: impl Decode + 'static, tx: tokio::sync::mpsc::Sender) { + // todo!() + // let uri: Uri = url.0.to_string().parse().unwrap(); + // let client = hyper::Client::new(); + // let mut resp = client.get(uri).await.unwrap(); + // loop { + // match resp.body_mut().data().await { + // Some(Ok(chunk)) => match decoder.decode(&chunk) { + // Ok(data) => { + // tracing::info!("Decoded: {:?}", data); + // tx.send(data).await.unwrap(); + // } + // Err(e) => tracing::info!("Failed to decode: {}", e), + // }, + // Some(Err(e)) => tracing::info!("Failed to read: {}", e), + // None => break, + // } + // } + // } + + fn sink_reader( + ctx: &mut Context, + reader: Reader, + decoder: impl Decode + Send + 'static, + time_source: TimeSource Time + Send + 'static>, + ) -> Stream { + let (tx2, rx2) = tokio::sync::mpsc::channel(10); + ctx.spawn(async move { + match reader { + Reader::Stdin => Self::read_pipe(tokio::io::stdin(), decoder, false, tx2).await, + Reader::File { path, watch } => Self::read_file(path, decoder, watch, tx2).await, + // Reader::Http { url } => Self::read_http(url, decoder, tx2).await, + Reader::Tcp { addr } => Self::read_socket(addr, decoder, tx2).await, + Reader::Kafka { addr: _, topic: _ } => todo!(), + } + }); + Self::source_event_time(ctx, rx2, time_source) + } + + fn source_event_time( + ctx: &mut Context, + rx: tokio::sync::mpsc::Receiver, + time_source: TimeSource Time + Send + 'static>, + ) -> Stream { + match time_source { + TimeSource::Ingestion { watermark_interval } => { + Self::source_ingestion_time(ctx, rx, watermark_interval) + } + TimeSource::Event { + extractor, + watermark_interval, + slack, + } => Self::_source_event_time(ctx, rx, extractor, watermark_interval, slack), + } + } + + fn source_ingestion_time( + ctx: &mut Context, + mut rx: tokio::sync::mpsc::Receiver, + watermark_interval: Duration, + ) -> Stream { + ctx.operator(|tx1| async move { + let mut watermark_interval = tokio::time::interval(watermark_interval.to_std()); + loop { + tokio::select! { + _ = watermark_interval.tick() => { + tx1.send(Event::Watermark(Time::now())).await; + }, + data = rx.recv() => { + match data { + Some(data) => tx1.send(Event::Data(Time::now(), data)).await, + None => { + tx1.send(Event::Sentinel).await; + break; + }, + } + } + } + } + }) + } + + fn _source_event_time( + ctx: &mut Context, + mut rx: tokio::sync::mpsc::Receiver, + extractor: impl Fn(&T) -> Time + Send + 'static, + watermark_interval: Duration, + slack: Duration, + ) -> Stream { + ctx.operator(|tx| async move { + let mut latest_time = OffsetDateTime::UNIX_EPOCH; + let slack = slack.to_std(); + let mut watermark_interval = tokio::time::interval(watermark_interval.to_std()); + let mut watermark = OffsetDateTime::UNIX_EPOCH; + loop { + tokio::select! { + _ = watermark_interval.tick() => { + if latest_time > OffsetDateTime::UNIX_EPOCH { + watermark = latest_time - slack; + tx.send(Event::Watermark(Time(watermark))).await; + } + }, + data = rx.recv() => { + match data { + Some(data) => { + let time = extractor(&data); + if time.0 < watermark { + continue; + } + if time.0 > latest_time { + latest_time = time.0; + } + tx.send(Event::Data(time, data)).await; + } + None => { + tx.send(Event::Sentinel).await; + break; + }, + } + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window.rs b/crates/runtime/src/builtins/stream/window.rs new file mode 100644 index 0000000..5d3637f --- /dev/null +++ b/crates/runtime/src/builtins/stream/window.rs @@ -0,0 +1,35 @@ +use crate::builtins::duration::Duration; +use crate::builtins::time::Time; + +pub mod count_sliding_aligned_commutative_associative; +pub mod count_sliding_holistic; +pub mod count_sliding_invertible; +pub mod count_tumbling_holistic; + +pub mod time_sliding_aligned_commutative_associative; +pub mod time_sliding_aligned_holistic; +pub mod time_sliding_commutative_invertible; +pub mod time_sliding_invertible; +pub mod time_tumbling_holistic; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct WindowRange { + pub t0: Time, + pub t1: Time, +} + +impl WindowRange { + pub fn new(t0: Time, t1: Time) -> Self { + Self { t0, t1 } + } + + pub fn of(time: Time, duration: Duration, step: Duration) -> Self { + let t0 = align(time, step); + let t1 = t0 + duration; + Self { t0, t1 } + } +} + +pub fn align(time: Time, step: Duration) -> Time { + time.div_floor(step) * step +} diff --git a/crates/runtime/src/builtins/stream/window/count_sliding_aligned_commutative_associative.rs b/crates/runtime/src/builtins/stream/window/count_sliding_aligned_commutative_associative.rs new file mode 100644 index 0000000..f2bd683 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/count_sliding_aligned_commutative_associative.rs @@ -0,0 +1,64 @@ +use std::collections::VecDeque; + +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::runner::context::Context; +use crate::traits::Data; + +impl Stream { + #[allow(clippy::too_many_arguments)] + pub fn count_sliding_aligned_commutative_associative_window( + mut self, + ctx: &mut Context, + size: usize, + step: usize, + _init: P, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, &P) -> P + Send + 'static, + lower: impl Fn(&P) -> O + Send + 'static, + ) -> Stream + where + P: Data, + O: Data, + { + assert!(size % step == 0); + ctx.operator(|tx| async move { + let mut s: VecDeque

= VecDeque::new(); + let mut n = 0; + loop { + match self.recv().await { + Event::Data(time, data) => { + let data = lift(&data); + if n % step == 0 { + s.push_back(data); + } else { + let agg = s.back_mut().unwrap(); + *agg = combine(&agg, &data); + } + if n == size { + let agg = s.pop_front().unwrap(); + let agg = s + .range(0..(size / step) - 1) + .fold(agg, |agg, data| combine(&agg, &data)); + let data = lower(&agg); + tx.send(Event::Data(time, data)).await; + n -= step; + } else { + n += 1; + } + } + Event::Watermark(time) => { + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window/count_sliding_holistic.rs b/crates/runtime/src/builtins/stream/window/count_sliding_holistic.rs new file mode 100644 index 0000000..8520eda --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/count_sliding_holistic.rs @@ -0,0 +1,60 @@ +use std::collections::VecDeque; + +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::runner::context::Context; +use crate::traits::Data; + +impl Stream { + pub fn count_sliding_holistic_window( + mut self, + ctx: &mut Context, + size: usize, + step: usize, + compute: impl Fn(Window) -> O + Send + 'static, + ) -> Stream + where + O: Data, + { + ctx.operator(|tx| async move { + let mut s: VecDeque = VecDeque::with_capacity(size); + loop { + match self.recv().await { + Event::Data(time, data) => { + s.push_back(data); + if s.len() == size { + let result = compute(Window::new(&s)); + for _ in 0..step { + s.pop_front(); + } + tx.send(Event::Data(time, result.deep_clone())).await; + } + } + Event::Watermark(time) => { + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} + +pub struct Window<'a, T> { + data: &'a VecDeque, +} + +impl<'a, T> Window<'a, T> { + fn new(data: &'a VecDeque) -> Self { + Self { data } + } + pub fn iter(&self) -> std::collections::vec_deque::Iter<'a, T> { + self.data.iter() + } +} diff --git a/crates/runtime/src/builtins/stream/window/count_sliding_invertible.rs b/crates/runtime/src/builtins/stream/window/count_sliding_invertible.rs new file mode 100644 index 0000000..2eb12b6 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/count_sliding_invertible.rs @@ -0,0 +1,60 @@ +use std::collections::VecDeque; + +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::runner::context::Context; +use crate::traits::Data; + +impl Stream { + #[allow(clippy::too_many_arguments)] + pub fn count_sliding_invertible_window( + mut self, + ctx: &mut Context, + size: usize, + step: usize, + init: P, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, &P) -> P + Send + 'static, + lower: impl Fn(&P) -> O + Send + 'static, + inverse: impl Fn(&P, &P) -> P + Send + 'static, + ) -> Stream + where + P: Data, + O: Data, + { + ctx.operator(|tx| async move { + let mut s: P = init; + let mut vec: VecDeque

= VecDeque::new(); + let mut n = 0; + loop { + match self.recv().await { + Event::Data(time, data) => { + let data = lift(&data); + s = combine(&s, &data); + vec.push_back(data); + if n == size { + tx.send(Event::Data(time, lower(&s).deep_clone())).await; + for _ in 0..step { + let data = vec.pop_front().unwrap(); + s = inverse(&s, &data); + } + n -= step; + } else { + n += 1; + } + } + Event::Watermark(time) => { + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window/count_tumbling_holistic.rs b/crates/runtime/src/builtins/stream/window/count_tumbling_holistic.rs new file mode 100644 index 0000000..abe2974 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/count_tumbling_holistic.rs @@ -0,0 +1,55 @@ +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::runner::context::Context; +use crate::traits::Data; + +impl Stream { + pub fn count_tumbling_holistic_window( + mut self, + ctx: &mut Context, + size: usize, + compute: impl Fn(Window) -> O + Send + 'static, + ) -> Stream + where + O: Data, + { + ctx.operator(|tx| async move { + let mut agg: Vec = Vec::with_capacity(size); + loop { + match self.recv().await { + Event::Data(time, data) => { + agg.push(data); + if agg.len() == size { + let result = compute(Window::new(&agg)); + tx.send(Event::Data(time, result.deep_clone())).await; + agg.clear(); + } + } + Event::Watermark(time) => { + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} + +pub struct Window<'a, T> { + data: &'a Vec, +} + +impl<'a, T> Window<'a, T> { + fn new(data: &'a Vec) -> Self { + Self { data } + } + pub fn iter(&self) -> std::slice::Iter<'a, T> { + self.data.iter() + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_sliding_aligned_commutative_associative.rs b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_commutative_associative.rs new file mode 100644 index 0000000..71cf73a --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_commutative_associative.rs @@ -0,0 +1,71 @@ +use std::collections::BTreeMap; + +use crate::builtins::duration::Duration; +use crate::builtins::stream::window::align; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; + +use super::WindowRange; + +impl Stream { + // Requires that duration % step == 0 + #[allow(clippy::too_many_arguments)] + pub fn time_sliding_aligned_commutative_associative_window( + mut self, + ctx: &mut Context, + duration: Duration, + step: Duration, + _init: P, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, &P) -> P + Send + 'static, + lower: impl Fn(&P, WindowRange) -> O + Send + 'static, + ) -> Stream + where + O: Data, + P: Data, + { + assert!(duration % step == Duration::from_seconds(0)); + ctx.operator(|tx| async move { + let mut slices: BTreeMap = BTreeMap::new(); + loop { + match self.recv().await { + Event::Data(time, data) => { + let data = lift(&data); + slices + .entry(align(time, step)) + .and_modify(|agg| *agg = combine(agg, &data)) + .or_insert(data); + } + Event::Watermark(time) => { + while let Some(entry) = slices.first_entry() { + let t0 = *entry.key(); + let t1 = t0 + duration; + let wr = WindowRange::new(t0, t1); + if wr.t1 <= time { + let mut agg = entry.remove(); + for (_, v) in slices.range(..t1) { + agg = combine(&agg, v); + } + let output = lower(&agg, wr); + tx.send(Event::Data(time, output.deep_clone())).await; + } else { + break; + } + } + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic.rs b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic.rs new file mode 100644 index 0000000..5cbc87f --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic.rs @@ -0,0 +1,140 @@ +use derive_more::Deref; +use derive_more::DerefMut; +use std::collections::BTreeMap; + +use crate::builtins::duration::Duration; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; + +use super::align; +use super::WindowRange; + +impl Stream { + /// This window maintains a BTreeMap that maps window starting times to slices of data, where + /// each slice is a vector of (Time, Data) pairs. When a watermark is received, the window + /// iterates over the slices before the watermark and sends the result of the compute function + pub fn time_sliding_aligned_holistic_window( + mut self, + ctx: &mut Context, + duration: Duration, + step: Duration, + compute: impl Fn(Window, WindowRange) -> O + Send + 'static, + ) -> Stream + where + O: Data, + { + ctx.operator(|tx| async move { + let mut s: WindowState = WindowState::new(); + loop { + match self.recv().await { + Event::Data(time, data) => { + let t0 = align(time, step); + s.get_mut(t0).push((time, data)); + } + Event::Watermark(time) => { + while let Some(entry) = s.0.first_entry() { + let t0 = *entry.key(); + let wr = WindowRange::new(t0, t0 + duration); + if wr.t1 > time { + break; + } + let win = Window::new(&s.0, wr.t1); + let data = compute(win, wr); + s.0.pop_first(); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + } + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} + +#[derive(Debug, Default, Deref, DerefMut)] +struct WindowState(BTreeMap>); + +impl WindowState { + fn new() -> Self { + Self(BTreeMap::new()) + } + fn get_mut(&mut self, time: Time) -> &mut Slice { + self.0.entry(time).or_default() + } +} + +#[derive(Debug)] +pub struct Window<'a, T> { + buffer: &'a BTreeMap>, + t1: Time, +} + +impl<'a, T> Window<'a, T> { + fn new(buffer: &'a BTreeMap>, t1: Time) -> Self { + Self { buffer, t1 } + } + pub fn iter(&self) -> WindowIter { + WindowIter::new(self.buffer.range(..self.t1)) + } +} + +impl<'a, T> IntoIterator for &'a Window<'a, T> { + type Item = &'a T; + type IntoIter = WindowIter<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +#[derive(Debug, Deref, DerefMut)] +struct Slice(Vec<(Time, T)>); + +impl Default for Slice { + fn default() -> Self { + Self(Vec::new()) + } +} + +pub struct WindowIter<'a, T> { + iter: std::collections::btree_map::Range<'a, Time, Slice>, + current: Option>, +} + +impl<'a, T> WindowIter<'a, T> { + fn new(iter: std::collections::btree_map::Range<'a, Time, Slice>) -> Self { + Self { + iter, + current: None, + } + } +} + +impl<'a, T> Iterator for WindowIter<'a, T> { + type Item = &'a T; + + fn next(&mut self) -> Option { + if let Some(current) = &mut self.current { + if let Some(item) = current.next().map(|(_, ref item)| item) { + return Some(item); + } + } + if let Some((_, slice)) = self.iter.next() { + let mut current = slice.0.iter(); + let next = current.next().map(|(_, ref item)| item); + self.current = Some(current); + return next; + } + None + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic_vec.rs b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic_vec.rs new file mode 100644 index 0000000..71d0206 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_sliding_aligned_holistic_vec.rs @@ -0,0 +1,140 @@ +use crate::builtins::duration::Duration; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; + +use super::align; +use super::WindowRange; + +impl Stream { + /// This window maintains a BTreeMap that maps window starting times to slices of data, where + /// each slice is a collection of (Time, Data) pairs. When a watermark is received, the window + /// iterates over the slices before the watermark and sends the result of the compute function + pub fn time_sliding_aligned_holistic_vec_window( + mut self, + ctx: &mut Context, + duration: Duration, + step: Duration, + compute: impl Fn(Window, WindowRange) -> O + Send + 'static, + ) -> Stream + where + O: Data, + { + ctx.operator(|tx| async move { + let mut buffer: Vec<(Time, Slice)> = Vec::new(); + // Slices before this time are sorted + let mut t_sorted: Time = Time::zero(); + loop { + match self.recv().await { + Event::Data(time, data) => { + let t0 = align(time, step); + match buffer.binary_search_by_key(&t0, |(t, _)| *t) { + Ok(i) => { + (buffer[i].1).0.push((time, data)); + } + Err(i) => { + buffer.insert(i, (t0, Slice::new())); + (buffer[i].1).0.push((time, data)); + } + } + } + Event::Watermark(time) => { + let t_safe = align(time, step); + for (t, slice) in &mut buffer { + if *t < t_sorted { + continue; + } else if *t < t_safe { + slice.0.sort_by_key(|(t, _)| *t); + } else { + break; + } + } + t_sorted = t_safe; + for (t0, _) in &buffer { + let wr = WindowRange::new(*t0, *t0 + duration); + if wr.t1 > time { + break; + } + let data = compute(Window::new(&buffer), wr); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + } + buffer.retain(|(t, _)| *t >= t_safe); + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} + +pub struct Window<'a, T> { + buffer: &'a [(Time, Slice)], +} + +impl<'a, T> Window<'a, T> { + fn new(buffer: &'a [(Time, Slice)]) -> Self { + Self { buffer } + } + pub fn iter(&self) -> WindowIter { + WindowIter::new(self.buffer.iter()) + } +} + +impl<'a, T> IntoIterator for &'a Window<'a, T> { + type Item = &'a T; + type IntoIter = WindowIter<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +struct Slice(Vec<(Time, T)>); + +impl Slice { + fn new() -> Self { + Self(Vec::new()) + } +} + +pub struct WindowIter<'a, T> { + iter: std::slice::Iter<'a, (Time, Slice)>, + current: Option>, +} + +impl<'a, T> WindowIter<'a, T> { + fn new(iter: std::slice::Iter<'a, (Time, Slice)>) -> Self { + Self { + iter, + current: None, + } + } +} + +impl<'a, T> Iterator for WindowIter<'a, T> { + type Item = &'a T; + + fn next(&mut self) -> Option { + if let Some(current) = &mut self.current { + if let Some(item) = current.next().map(|(_, ref item)| item) { + return Some(item); + } + } + if let Some((_, slice)) = self.iter.next() { + let mut current = slice.0.iter(); + let next = current.next().map(|(_, ref item)| item); + self.current = Some(current); + return next; + } + None + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_sliding_commutative_invertible.rs b/crates/runtime/src/builtins/stream/window/time_sliding_commutative_invertible.rs new file mode 100644 index 0000000..9a517d3 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_sliding_commutative_invertible.rs @@ -0,0 +1,92 @@ +use std::collections::BTreeMap; + +use crate::builtins::duration::Duration; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; + +use super::WindowRange; + +impl Stream { + // Properties: + // * Inverse: We can undo aggregations. + #[allow(clippy::too_many_arguments)] + pub fn time_sliding_commutative_invertible_window( + mut self, + ctx: &mut Context, + duration: Duration, + step: Duration, + init: P, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, &P) -> P + Send + 'static, + lower: impl Fn(&P, WindowRange) -> O + Send + 'static, + inverse: impl Fn(&P, &P) -> P + Send + 'static, + ) -> Stream + where + O: Data, + P: Data, + { + ctx.operator(|tx| async move { + let mut buffer: BTreeMap = BTreeMap::new(); + let mut first: Option = None; + let mut agg: P = init; + loop { + match self.recv().await { + Event::Data(time, data) => { + // With commutativity, we can pre-aggregate data for the first window + let data = lift(&data); + if let Some(first) = first.as_mut() { + if time < first.t1 { + agg = combine(&agg, &data); + } + } else { + let wr = WindowRange::of(time, duration, step); + first = Some(wr); + agg = combine(&agg, &data); + } + buffer.insert(time, data); + } + Event::Watermark(time) => { + // Process the first window + if let Some(wr) = first { + if wr.t1 <= time { + let data = lower(&agg, wr); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + let after = buffer.split_off(&(wr.t0 + step)); + for (_, p) in std::mem::replace(&mut buffer, after) { + agg = inverse(&agg, &p); + } + first = None; + } + } + while let Some(entry) = buffer.first_entry() { + let wr = WindowRange::of(*entry.key(), duration, step); + if wr.t1 <= time { + for (_, p) in buffer.range(..wr.t1) { + agg = combine(&agg, p); + } + let data = lower(&agg, wr); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + // Evict the part of the oldest window that is no longer needed. + let after = buffer.split_off(&(wr.t0 + step)); + for (_, p) in std::mem::replace(&mut buffer, after) { + agg = inverse(&agg, &p); + } + } + } + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_sliding_invertible.rs b/crates/runtime/src/builtins/stream/window/time_sliding_invertible.rs new file mode 100644 index 0000000..fa63549 --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_sliding_invertible.rs @@ -0,0 +1,67 @@ +use crate::builtins::duration::Duration; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; +use std::collections::BTreeMap; + +use super::WindowRange; + +impl Stream { + // Properties: + // * Inverse: We can undo aggregations. + #[allow(clippy::too_many_arguments)] + pub fn time_sliding_invertible_window( + mut self, + ctx: &mut Context, + duration: Duration, + step: Duration, + init: P, + lift: impl Fn(&T) -> P + Send + 'static, + combine: impl Fn(&P, &P) -> P + Send + 'static, + lower: impl Fn(&P, WindowRange) -> O + Send + 'static, + inverse: impl Fn(&P, &P) -> P + Send + 'static, + ) -> Stream + where + O: Data, + P: Data, + { + ctx.operator(|tx| async move { + let mut buffer: BTreeMap = BTreeMap::new(); + let mut agg: P = init; + loop { + match self.recv().await { + Event::Data(time, data) => { + buffer.insert(time, lift(&data)); + } + Event::Watermark(time) => { + while let Some(entry) = buffer.first_entry() { + let wr = WindowRange::of(*entry.key(), duration, step); + if wr.t1 < time { + for (_, p) in buffer.range(..wr.t1) { + agg = combine(&agg, &p); + } + let data = lower(&agg, wr); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + // Evict the part of the oldest window that is no longer needed. + let after = buffer.split_off(&(wr.t0 + step)); + for (_, p) in std::mem::replace(&mut buffer, after) { + agg = inverse(&agg, &p); + } + } + } + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/stream/window/time_tumbling_holistic.rs b/crates/runtime/src/builtins/stream/window/time_tumbling_holistic.rs new file mode 100644 index 0000000..669465b --- /dev/null +++ b/crates/runtime/src/builtins/stream/window/time_tumbling_holistic.rs @@ -0,0 +1,55 @@ +use crate::builtins::duration::Duration; +use crate::builtins::stream::Event; +use crate::builtins::stream::Stream; +use crate::builtins::time::Time; +use crate::runner::context::Context; +use crate::traits::Data; +use crate::BTreeMap; + +use super::align; +use super::WindowRange; + +impl Stream { + pub fn time_tumbling_holistic_window( + mut self, + ctx: &mut Context, + duration: Duration, + compute: impl Fn(&[T], WindowRange) -> O + Send + 'static, + ) -> Stream + where + O: Data, + { + ctx.operator(|tx| async move { + let mut buffer: BTreeMap> = BTreeMap::new(); + loop { + match self.recv().await { + Event::Data(time, data) => { + let t0 = align(time, duration); + buffer.entry(t0).or_default().push(data); + } + Event::Watermark(time) => { + while let Some(entry) = buffer.first_entry() { + let t0 = *entry.key(); + let t1 = t0 + duration; + let wr = WindowRange::new(t0, t1); + if wr.t1 > time { + break; + } + let vs = entry.remove(); + let data = compute(&vs, wr); + tx.send(Event::Data(wr.t1, data.deep_clone())).await; + } + tx.send(Event::Watermark(time)).await; + } + Event::Snapshot(i) => { + tx.send(Event::Snapshot(i)).await; + } + Event::Sentinel => { + tx.send(Event::Sentinel).await; + break; + } + } + } + }) + } +} diff --git a/crates/runtime/src/builtins/string.rs b/crates/runtime/src/builtins/string.rs new file mode 100644 index 0000000..b7532ed --- /dev/null +++ b/crates/runtime/src/builtins/string.rs @@ -0,0 +1,222 @@ +use crate::formats::Decode; +use crate::formats::Encode; +use macros::DeepClone; +use macros::Send; +use macros::Unpin; + +use serde::de::DeserializeOwned; +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::encoding::Encoding; +use crate::builtins::unchecked_cell::UncheckedCell; +use crate::builtins::vec::Vec; +use crate::traits::DeepClone; + +#[derive(Clone, DeepClone, Send, Hash, Eq, PartialEq, Ord, PartialOrd, Debug, Unpin)] +#[repr(C)] +pub enum String { + Text(&'static str), + Heap(HeapString), +} + +#[derive( + Clone, + DeepClone, + Send, + Hash, + Eq, + PartialEq, + Ord, + PartialOrd, + Debug, + Unpin, + Serialize, + Deserialize, +)] +pub struct HeapString(UncheckedCell); + +impl AsRef for HeapString { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} + +impl PartialEq for String { + fn eq(&self, other: &str) -> bool { + self.as_ref() == other + } +} + +impl Serialize for String { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + String::Text(s) => s.serialize(serializer), + String::Heap(s) => s.serialize(serializer), + } + } +} + +impl<'de> Deserialize<'de> for String { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let s = ::deserialize(deserializer)?; + Ok(String::from(s)) + } +} + +impl std::fmt::Display for String { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, r#""{}""#, self.as_ref()) + } +} + +impl AsRef for String { + fn as_ref(&self) -> &str { + match self { + String::Text(s) => s, + String::Heap(s) => s.as_ref(), + } + } +} + +impl Default for String { + fn default() -> Self { + String::new() + } +} + +impl String { + pub fn new() -> String { + String::Heap(HeapString(UncheckedCell::new(std::string::String::new()))) + } + + pub fn with_capacity(capacity: usize) -> String { + String::from(std::string::String::with_capacity(capacity)) + } + + unsafe fn update(&mut self, f: impl FnOnce(&mut std::string::String) -> O) -> O { + match self { + String::Text(s) => { + let mut s = std::string::String::from(*s); + let o = f(&mut s); + *self = String::Heap(HeapString(UncheckedCell::new(s))); + o + } + String::Heap(s) => f(s.0.as_mut_unchecked()), + } + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn push(mut self, ch: char) -> Self { + self.update(|s| s.push(ch)); + self + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn push_string(mut self, other: String) -> Self { + self.update(|s| s.push_str(other.as_ref())); + self + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn remove(mut self, idx: usize) -> (Self, char) { + // Safety: This is an atomic operation. + let c = self.update(|s| s.remove(idx)); + (self, c) + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn insert(mut self, idx: usize, ch: char) -> Self { + self.update(|s| s.insert(idx, ch)); + self + } + + pub fn is_empty(self) -> bool { + self.as_ref().is_empty() + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn split_off(mut self, at: usize) -> (String, String) { + // Safety: This is an atomic operation. + let s = self.update(|s| String::from(s.split_off(at))); + (self, s) + } + + pub fn lines(self) -> Vec { + self.as_ref() + .lines() + .map(|s| String::from(s.to_string())) + .collect::>() + .into() + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn clear(mut self) -> Self { + self.update(|s| s.clear()); + self + } + + pub fn len(self) -> usize { + self.as_ref().len() + } + + pub fn decode(self, encoding: Encoding) -> T { + match encoding { + Encoding::Csv { sep } => crate::formats::csv::de::Reader::<1024>::new(sep) + .decode(self.as_ref().as_bytes()) + .unwrap(), + Encoding::Json => crate::formats::json::de::Reader::new() + .decode(self.as_ref().as_bytes()) + .unwrap(), + } + } + + pub fn encode(value: T, encoding: Encoding) -> Self { + let mut output = std::vec::Vec::new(); + match encoding { + Encoding::Csv { sep } => crate::formats::csv::ser::Writer::new(sep) + .encode(&value, &mut output) + .unwrap(), + Encoding::Json => crate::formats::json::ser::Writer::new() + .encode(&value, &mut output) + .unwrap(), + }; + String::from(std::string::String::from_utf8(output).unwrap()) + } +} + +impl<'a> From<&'a str> for String { + fn from(s: &'a str) -> Self { + String::from(s.to_string()) + } +} + +impl From for String { + fn from(i: i32) -> Self { + String::from(i.to_string()) + } +} + +impl From for String { + fn from(s: std::string::String) -> Self { + String::Heap(HeapString(UncheckedCell::new(s))) + } +} diff --git a/crates/runtime/src/builtins/time.rs b/crates/runtime/src/builtins/time.rs new file mode 100644 index 0000000..01ba3b9 --- /dev/null +++ b/crates/runtime/src/builtins/time.rs @@ -0,0 +1,179 @@ +use crate::builtins::duration::Duration; +use crate::traits::DeepClone; + +use num::Integer; +use serde::Deserialize; +use serde::Deserializer; +use serde::Serialize; +use serde::Serializer; +use time::format_description::well_known; + +use super::string::String; + +#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[repr(C)] +pub struct Time(pub time::OffsetDateTime); + +const EU: &[time::format_description::FormatItem<'_>] = + time::macros::format_description!(version = 2, "[year]-[month]-[day] [hour]:[minute]:[second]"); + +const US: &[time::format_description::FormatItem<'_>] = time::macros::format_description!( + version = 2, + "[month]/[day]/[year] [hour]:[minute]:[second] [period case:upper]" +); + +impl Serialize for Time { + fn serialize(&self, s: S) -> Result { + let v = time::OffsetDateTime::format(self.0, &well_known::Iso8601::DEFAULT) + .map_err(serde::ser::Error::custom)?; + v.serialize(s) + } +} + +impl<'de> Deserialize<'de> for Time { + fn deserialize>(d: D) -> Result { + let s: std::string::String = Deserialize::deserialize(d)?; + match time::PrimitiveDateTime::parse(s.as_ref(), &well_known::Iso8601::DEFAULT) + .or_else(|_| time::PrimitiveDateTime::parse(s.as_ref(), &well_known::Rfc2822)) + .or_else(|_| time::PrimitiveDateTime::parse(s.as_ref(), &well_known::Rfc3339)) + .or_else(|_| time::PrimitiveDateTime::parse(s.as_ref(), &EU)) + .or_else(|_| time::PrimitiveDateTime::parse(s.as_ref(), &US)) + .map_err(serde::de::Error::custom) + { + Ok(v) => Ok(Time(v.assume_utc())), + Err(e) => s + .as_str() + .parse() + .ok() + .and_then(|v| time::OffsetDateTime::from_unix_timestamp(v).ok()) + .map(Time) + .ok_or(e), + } + } +} + +impl DeepClone for Time { + #[inline(always)] + fn deep_clone(&self) -> Self { + Time(self.0) + } +} + +impl Time { + #[inline(always)] + pub fn now() -> Time { + Time(time::OffsetDateTime::now_utc()) + } + + #[inline(always)] + pub fn from_seconds(seconds: i64) -> Time { + Time(time::OffsetDateTime::from_unix_timestamp(seconds).unwrap()) + } + + #[inline(always)] + pub fn from_milliseconds(millis: i128) -> Time { + Self::from_nanoseconds(millis * 1000000) + } + + #[inline(always)] + pub fn from_microseconds(micros: i128) -> Time { + Self::from_nanoseconds(micros * 1000) + } + + #[inline(always)] + pub fn from_nanoseconds(nanos: i128) -> Time { + Time(time::OffsetDateTime::from_unix_timestamp_nanos(nanos).unwrap()) + } + + pub fn from_string(text: String, format: String) -> Time { + let format = time::format_description::parse_owned::<2>(format.as_ref()).unwrap(); + Time(time::OffsetDateTime::parse(text.as_ref(), &format).unwrap()) + } + + pub const fn seconds(self) -> i64 { + self.0.unix_timestamp() + } + + pub const fn nanoseconds(self) -> i128 { + self.0.unix_timestamp_nanos() + } + + pub const fn milliseconds(self) -> i128 { + self.0.unix_timestamp_nanos() / 1_000_000 + } + + pub const fn microseconds(self) -> i128 { + self.0.unix_timestamp_nanos() / 1_000 + } + + pub const fn month(self) -> i32 { + self.0.month() as i32 + } + + pub const fn day(self) -> i32 { + self.0.day() as i32 + } + + pub const fn year(self) -> i32 { + self.0.year() + } + + pub fn to_text(self, format: String) -> String { + let format = time::format_description::parse_owned::<2>(format.as_ref()).unwrap(); + String::from(self.0.format(&format).unwrap().as_str()) + } + + pub fn div_floor(self, duration: Duration) -> Self { + Time::from_nanoseconds(Integer::div_floor( + &self.nanoseconds(), + &duration.nanoseconds(), + )) + } + + pub const fn zero() -> Self { + Time(time::OffsetDateTime::UNIX_EPOCH) + } +} + +impl std::ops::Add for Time { + type Output = Self; + + #[inline(always)] + fn add(self, rhs: Duration) -> Self::Output { + Time::from_nanoseconds(self.nanoseconds() + rhs.nanoseconds()) + } +} + +impl std::ops::Sub for Time { + type Output = Self; + + #[inline(always)] + fn sub(self, rhs: Duration) -> Self::Output { + Time::from_nanoseconds(self.nanoseconds() - rhs.nanoseconds()) + } +} + +impl std::ops::Mul for Time { + type Output = Self; + + #[inline(always)] + fn mul(self, rhs: Duration) -> Self::Output { + Time::from_nanoseconds(self.nanoseconds() * rhs.nanoseconds()) + } +} + +impl std::ops::Div for Time { + type Output = Self; + + #[inline(always)] + fn div(self, rhs: Duration) -> Self::Output { + Time::from_nanoseconds(self.nanoseconds() / rhs.nanoseconds()) + } +} + +impl std::cmp::PartialEq for Time { + #[inline(always)] + fn eq(&self, other: &Duration) -> bool { + self.nanoseconds() == other.nanoseconds() + } +} diff --git a/crates/runtime/src/builtins/time_source.rs b/crates/runtime/src/builtins/time_source.rs new file mode 100644 index 0000000..1085eea --- /dev/null +++ b/crates/runtime/src/builtins/time_source.rs @@ -0,0 +1,30 @@ +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::duration::Duration; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[repr(C)] +pub enum TimeSource { + Ingestion { + watermark_interval: Duration, + }, + Event { + extractor: F, + watermark_interval: Duration, + slack: Duration, + }, +} + +impl TimeSource { + pub fn ingestion(watermark_interval: Duration) -> Self { + Self::Ingestion { watermark_interval } + } + pub fn event(extractor: F, watermark_interval: Duration, slack: Duration) -> Self { + Self::Event { + extractor, + watermark_interval, + slack, + } + } +} diff --git a/crates/runtime/src/builtins/unchecked_cell.rs b/crates/runtime/src/builtins/unchecked_cell.rs new file mode 100644 index 0000000..240e1a2 --- /dev/null +++ b/crates/runtime/src/builtins/unchecked_cell.rs @@ -0,0 +1,60 @@ +use macros::Send; +use macros::Sync; +use macros::Unpin; +use serde::Deserialize; +use serde::Serialize; + +use crate::traits::DeepClone; + +#[derive( + Default, Send, Sync, Unpin, Serialize, Deserialize, Eq, PartialEq, Hash, Ord, PartialOrd, +)] +#[repr(C)] +pub(crate) struct UncheckedCell(pub(crate) std::rc::Rc); + +impl DeepClone for UncheckedCell { + fn deep_clone(&self) -> Self { + Self(self.0.deep_clone()) + } +} + +impl Clone for UncheckedCell { + fn clone(&self) -> Self { + UncheckedCell(self.0.clone()) + } +} + +impl std::ops::Deref for UncheckedCell { + type Target = T; + fn deref(&self) -> &T { + self.0.as_ref() + } +} + +impl std::fmt::Debug for UncheckedCell { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.as_ref().fmt(f) + } +} + +impl UncheckedCell { + pub(crate) fn new(value: T) -> UncheckedCell { + UncheckedCell(std::rc::Rc::new(value)) + } + + // # Safety + // + // This method can only be used if the caller can guarantee that + // the value is not read or borrowed during the lifetime of `&mut T`. + // + // Borrow checking guarantees that the value is not dropped while + // the reference is still in use. + #[allow(clippy::mut_from_ref)] + pub(crate) unsafe fn as_mut_unchecked(&self) -> &mut T { + let v = std::rc::Rc::into_raw(self.0.clone()) as *mut T; + unsafe { + std::rc::Rc::decrement_strong_count(v); + &mut *v + } + } +} diff --git a/crates/runtime/src/builtins/url.rs b/crates/runtime/src/builtins/url.rs new file mode 100644 index 0000000..d0d6d3c --- /dev/null +++ b/crates/runtime/src/builtins/url.rs @@ -0,0 +1,22 @@ +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::result::Result; +use crate::builtins::string::String; + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[repr(C)] +pub struct Url(pub url::Url); + +impl Url { + pub fn parse(s: String) -> Result { + match url::Url::parse(s.as_ref()) { + Ok(v) => Result::ok(Url(v)), + Err(s) => Result::error(s.to_string().into()), + } + } + + pub fn to_string(self) -> String { + String::from(self.0.to_string()) + } +} diff --git a/crates/runtime/src/builtins/vec.rs b/crates/runtime/src/builtins/vec.rs new file mode 100644 index 0000000..6962a55 --- /dev/null +++ b/crates/runtime/src/builtins/vec.rs @@ -0,0 +1,168 @@ +use macros::Send; +use macros::Sync; +use macros::Unpin; + +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::option::Option; +use crate::builtins::unchecked_cell::UncheckedCell; +use crate::traits::DeepClone; + +#[derive(Debug, Send, Sync, Unpin, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd)] +#[repr(C)] +pub struct Vec(pub(crate) UncheckedCell>); + +impl Clone for Vec { + fn clone(&self) -> Self { + Vec(self.0.clone()) + } +} + +impl std::hash::Hash for Vec { + fn hash(&self, state: &mut H) { + self.0.hash(state) + } +} + +impl DeepClone for Vec { + fn deep_clone(&self) -> Self { + Self(self.0.deep_clone()) + } +} + +impl Default for Vec { + fn default() -> Self { + Vec(UncheckedCell::new(std::vec::Vec::::new())) + } +} + +impl Vec { + pub fn new() -> Vec { + Self::default() + } + + pub fn len(self) -> usize { + self.0.len() + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn push(&self, value: T) + where + T: Clone, + { + self.0.as_mut_unchecked().push(value); + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn pop(&self) -> Option + where + T: Clone, + { + Option::from(self.0.as_mut_unchecked().pop()) + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn remove(&self, index: usize) -> T + where + T: Clone, + { + self.0.as_mut_unchecked().remove(index) + } + + pub fn get(&self, index: usize) -> Option + where + T: Clone, + { + Option::from(self.0.get(index).cloned()) + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn insert(&self, index: usize, value: T) + where + T: Clone, + { + self.0.as_mut_unchecked().insert(index, value); + } + + pub fn is_empty(self) -> bool { + self.0.is_empty() + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn sort(&self) + where + T: Clone + PartialOrd, + { + self.0 + .as_mut_unchecked() + .sort_by(|a, b| a.partial_cmp(b).unwrap_or(std::cmp::Ordering::Equal)); + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn truncate(&self, len: usize) + where + T: Clone, + { + self.0.as_mut_unchecked().truncate(len); + } + + /// # Safety + /// + /// Refer to the documentation of `UncheckedCell::as_mut_unchecked`. + pub unsafe fn clear(&self) { + self.0.as_mut_unchecked().clear(); + } + + pub fn iter(&self) -> VecIter + where + T: Clone, + { + VecIter { + vec: self.clone(), + index: 0, + } + } +} + +impl From> for Vec { + fn from(vec: std::vec::Vec) -> Self { + Vec(UncheckedCell::new(vec)) + } +} + +pub struct VecIter { + vec: Vec, + index: usize, +} + +impl Iterator for VecIter +where + T: Clone, +{ + type Item = T; + + fn next(&mut self) -> std::option::Option { + let result = self.vec.get(self.index); + self.index += 1; + result.0 + } +} + +impl FromIterator for Vec { + fn from_iter>(iter: I) -> Self { + Vec(UncheckedCell::new(std::vec::Vec::from_iter(iter))) + } +} diff --git a/crates/runtime/src/builtins/writer.rs b/crates/runtime/src/builtins/writer.rs new file mode 100644 index 0000000..9a78a78 --- /dev/null +++ b/crates/runtime/src/builtins/writer.rs @@ -0,0 +1,34 @@ +use serde::Deserialize; +use serde::Serialize; + +use crate::builtins::path::Path; +use crate::builtins::socket::SocketAddr; +use crate::builtins::string::String; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[repr(C)] +pub enum Writer { + Stdout, + File { path: Path }, + // Http { url: Url }, + Tcp { addr: SocketAddr }, + Kafka { addr: SocketAddr, topic: String }, +} + +impl Writer { + pub fn stdout() -> Self { + Self::Stdout + } + pub fn file(path: Path) -> Self { + Self::File { path } + } + // pub fn http(url: Url) -> Self { + // Self::Http { url } + // } + pub fn tcp(addr: SocketAddr) -> Self { + Self::Tcp { addr } + } + pub fn kafka(addr: SocketAddr, topic: String) -> Self { + Self::Kafka { addr, topic } + } +} diff --git a/crates/runtime/src/formats/csv/de.rs b/crates/runtime/src/formats/csv/de.rs new file mode 100644 index 0000000..ada581f --- /dev/null +++ b/crates/runtime/src/formats/csv/de.rs @@ -0,0 +1,504 @@ +use serde::de::DeserializeSeed; +use serde::Deserialize; + +use crate::formats::Decode; + +pub struct Reader { + inner: csv_core::Reader, + buffer: [u8; N], + record_ends: [usize; 20], // To hold the ends of each field +} + +pub struct Deserializer<'a, const N: usize> { + reader: &'a mut Reader, + input: &'a [u8], + pub nread: usize, + current_field_index: usize, // To keep track of the current field index + total_fields: usize, // Total number of fields in the current record +} + +impl Reader { + #[allow(clippy::new_without_default)] + pub fn new(sep: char) -> Self { + Self { + inner: csv_core::ReaderBuilder::new().delimiter(sep as u8).build(), + buffer: [0; N], + record_ends: [0; 20], + } + } +} +impl Decode for Reader { + type Error = Error; + fn decode<'de, T>(&mut self, input: &'de [u8]) -> Result + where + T: Deserialize<'de>, + { + let mut deserializer = Deserializer::new(self, input); + T::deserialize(&mut deserializer) + } +} + +#[derive(Debug, PartialEq, Eq)] +pub enum Error { + /// Buffer overflow. + Overflow, + /// Expected an empty field. + ExpectedEmpty, + /// Invalid boolean value. Expected either `true` or `false`. + InvalidBool(String), + /// Invalid integer. + #[cfg(feature = "opt")] + InvalidInt(String), + #[cfg(not(feature = "opt"))] + InvalidInt(std::num::ParseIntError), + /// Invalid floating-point number. + #[cfg(feature = "opt")] + InvalidFloat(lexical_parse_float::Error), + #[cfg(not(feature = "opt"))] + InvalidFloat(std::num::ParseFloatError), + /// Invalid UTF-8 encoded character. + InvalidChar(String), + /// Invalid UTF-8 encoded string. + InvalidStr(std::str::Utf8Error), + /// Invalid UTF-8 encoded string. + InvalidString(std::string::FromUtf8Error), + /// Error with a custom message had to be discard. + Custom(String), + BufferTooSmall, + EndOfRecord, +} + +pub type Result = std::result::Result; + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::Overflow => write!(f, "Buffer overflow."), + Error::ExpectedEmpty => write!(f, "Expected an empty field."), + Error::InvalidBool(s) => write!(f, "Invalid bool: {s}"), + Error::InvalidInt(s) => write!(f, "Invalid integer: {s}"), + Error::InvalidFloat(e) => write!(f, "Invalid float: {e}"), + Error::InvalidChar(s) => write!(f, "Invalid character: {s}"), + Error::InvalidStr(e) => write!(f, "Invalid string: {e}"), + Error::InvalidString(e) => write!(f, "Invalid string: {e}"), + Error::Custom(s) => write!(f, "CSV does not match deserializer's expected format: {s}"), + Error::BufferTooSmall => write!(f, "Buffer too small"), + Error::EndOfRecord => write!(f, "End of record"), + } + } +} + +impl serde::de::StdError for Error {} + +impl serde::de::Error for Error { + fn custom(msg: T) -> Self { + Self::Custom(msg.to_string()) + } +} + +impl<'a, const N: usize> Deserializer<'a, N> { + pub fn new(reader: &'a mut Reader, input: &'a [u8]) -> Self { + Self { + reader, + input, + nread: 0, + current_field_index: 0, + total_fields: 0, + } + } + + fn advance_record(&mut self) -> Result<()> { + self.current_field_index = 0; + + let (result, r, _w, ends) = self.reader.inner.read_record( + &self.input[self.nread..], + &mut self.reader.buffer[0..], + &mut self.reader.record_ends[0..], + ); + self.nread += r; + self.total_fields = ends; + + match result { + csv_core::ReadRecordResult::InputEmpty => {} + csv_core::ReadRecordResult::End => {} + csv_core::ReadRecordResult::OutputFull => return Err(Error::Overflow), + csv_core::ReadRecordResult::OutputEndsFull => return Err(Error::BufferTooSmall), + csv_core::ReadRecordResult::Record => {} + } + + Ok(()) + } + + fn read_bytes(&mut self) -> Result<&[u8]> { + if self.current_field_index >= self.total_fields { + return Err(Error::EndOfRecord); // New error variant for end of record + } + + let start = if self.current_field_index == 0 { + 0 + } else { + self.reader.record_ends[self.current_field_index - 1] + }; + let end = self.reader.record_ends[self.current_field_index]; + self.current_field_index += 1; + + Ok(&self.reader.buffer[start..end]) + } + + #[cfg(feature = "opt")] + fn read_int(&mut self) -> Result { + let bytes = self.read_bytes()?; + atoi::atoi(bytes) + .ok_or_else(|| Error::InvalidInt(std::str::from_utf8(bytes).unwrap().to_string())) + } + + #[cfg(not(feature = "opt"))] + fn read_int>(&mut self) -> Result { + let bytes = self.read_bytes()?; + std::str::from_utf8(bytes) + .unwrap() + .parse::() + .map_err(|e| Error::InvalidInt(e)) + } + + #[cfg(feature = "opt")] + fn read_float(&mut self) -> Result { + T::from_lexical(self.read_bytes()?) + .map_err(|e: lexical_parse_float::Error| Error::InvalidFloat(e)) + } + + #[cfg(not(feature = "opt"))] + fn read_float>(&mut self) -> Result { + let bytes = self.read_bytes()?; + std::str::from_utf8(bytes) + .unwrap() + .parse::() + .map_err(|e| Error::InvalidFloat(e)) + } + + fn read_bool(&mut self) -> Result { + let bytes = self.read_bytes()?; + match bytes { + b"true" => Ok(true), + b"false" => Ok(false), + _ => Err(Error::InvalidBool( + std::str::from_utf8(bytes).unwrap().to_string(), + )), + } + } + + fn read_char(&mut self) -> Result { + let str = self.read_str()?; + let mut iter = str.chars(); + let c = iter + .next() + .ok_or_else(|| Error::InvalidChar(str.to_string()))?; + if iter.next().is_some() { + Err(Error::InvalidChar(str.to_string())) + } else { + Ok(c) + } + } + + fn read_str(&mut self) -> Result<&str> { + std::str::from_utf8(self.read_bytes()?) + .map_err(|e: std::str::Utf8Error| Error::InvalidStr(e)) + } + + fn read_string(&mut self) -> Result { + std::string::String::from_utf8(self.read_bytes()?.to_vec()) + .map_err(Error::InvalidString) + } +} + +impl<'de, 'a, 'b, const N: usize> serde::de::Deserializer<'de> for &'a mut Deserializer<'b, N> { + type Error = Error; + + fn deserialize_any(self, _visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + unreachable!("`Deserializer::deserialize_any` is not supported") + } + + fn deserialize_bool(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_bool(self.read_bool()?) + } + + fn deserialize_i8(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_i8(self.read_int()?) + } + + fn deserialize_i16(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_i16(self.read_int()?) + } + + fn deserialize_i32(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_i32(self.read_int()?) + } + + fn deserialize_i64(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_i64(self.read_int()?) + } + + fn deserialize_u8(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_u8(self.read_int()?) + } + + fn deserialize_u16(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_u16(self.read_int()?) + } + + fn deserialize_u32(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_u32(self.read_int()?) + } + + fn deserialize_u64(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_u64(self.read_int()?) + } + + fn deserialize_f32(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_f32(self.read_float()?) + } + + fn deserialize_f64(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_f64(self.read_float()?) + } + + fn deserialize_char(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_char(self.read_char()?) + } + + fn deserialize_str(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_str(self.read_str()?) + } + + fn deserialize_string(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_string(self.read_string()?) + } + + fn deserialize_bytes(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_bytes(self.read_bytes()?) + } + + fn deserialize_byte_buf(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_byte_buf(self.read_bytes()?.to_vec()) + } + + fn deserialize_option(self, _visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + todo!() + // if self.peek_bytes()?.is_empty() { + // visitor.visit_none() + // } else { + // visitor.visit_some(self) + // } + } + + fn deserialize_unit(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + if !self.read_bytes()?.is_empty() { + return Err(Error::ExpectedEmpty); + } + visitor.visit_unit() + } + + fn deserialize_unit_struct(self, _name: &'static str, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + self.deserialize_unit(visitor) + } + + fn deserialize_newtype_struct(self, _name: &'static str, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_newtype_struct(self) + } + + fn deserialize_seq(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_seq(self) + } + + fn deserialize_tuple(self, _len: usize, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_seq(self) + } + + fn deserialize_tuple_struct( + self, + _name: &'static str, + _len: usize, + visitor: V, + ) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_seq(self) + } + + fn deserialize_map(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_seq(self) + } + + fn deserialize_struct( + self, + _name: &'static str, + _fields: &'static [&'static str], + visitor: V, + ) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_seq(self) + } + + fn deserialize_enum( + self, + _name: &'static str, + _variants: &'static [&'static str], + visitor: V, + ) -> Result + where + V: serde::de::Visitor<'de>, + { + visitor.visit_enum(self) + } + + fn deserialize_identifier(self, _visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + unimplemented!("`Deserializer::deserialize_identifier` is not supported"); + } + + fn deserialize_ignored_any(self, visitor: V) -> Result + where + V: serde::de::Visitor<'de>, + { + let _ = self.read_bytes()?; + visitor.visit_unit() + } +} + +impl<'de, 'a, 'b, const N: usize> serde::de::VariantAccess<'de> for &'a mut Deserializer<'b, N> { + type Error = Error; + + fn unit_variant(self) -> Result<()> { + Ok(()) + } + + fn newtype_variant_seed>(self, _seed: U) -> Result { + unimplemented!("`VariantAccess::newtype_variant_seed` is not implemented"); + } + + fn tuple_variant>( + self, + _len: usize, + _visitor: V, + ) -> Result { + unimplemented!("`VariantAccess::tuple_variant` is not implemented"); + } + + fn struct_variant>( + self, + _fields: &'static [&'static str], + _visitor: V, + ) -> Result { + unimplemented!("`VariantAccess::struct_variant` is not implemented"); + } +} + +impl<'de, 'a, 'b, const N: usize> serde::de::EnumAccess<'de> for &'a mut Deserializer<'b, N> { + type Error = Error; + + type Variant = Self; + + fn variant_seed(self, seed: V) -> Result<(V::Value, Self::Variant)> + where + V: DeserializeSeed<'de>, + { + use serde::de::IntoDeserializer; + let variant_name = self.read_bytes()?; + seed.deserialize(variant_name.into_deserializer()) + .map(|v| (v, self)) + } +} + +impl<'de, 'a, 'b, const N: usize> serde::de::SeqAccess<'de> for &'a mut Deserializer<'b, N> { + type Error = Error; + fn next_element_seed(&mut self, seed: V) -> Result> + where + V: DeserializeSeed<'de>, + { + if self.current_field_index >= self.total_fields { + self.advance_record()?; + if self.total_fields == 0 { + return Ok(None); + } + } + + seed.deserialize(&mut **self).map(Some) + } +} diff --git a/crates/runtime/src/formats/csv/ser.rs b/crates/runtime/src/formats/csv/ser.rs new file mode 100644 index 0000000..c35e9c8 --- /dev/null +++ b/crates/runtime/src/formats/csv/ser.rs @@ -0,0 +1,443 @@ +use serde::ser; +use serde::Serialize; + +use crate::formats::Encode; + +pub struct Writer { + inner: csv_core::Writer, +} + +impl Writer { + #[allow(clippy::new_without_default)] + pub fn new(sep: char) -> Self { + Self { + inner: csv_core::WriterBuilder::new().delimiter(sep as u8).build(), + } + } +} + +impl Encode for Writer { + type Error = Error; + fn encode(&mut self, value: &T, output: &mut Vec) -> Result + where + T: Serialize + ?Sized, + { + let mut nwritten = 0; + + let mut serializer = Serializer::new(&mut self.inner, output); + value.serialize(&mut serializer)?; + nwritten += serializer.nwritten; + + let (result, n) = self.inner.terminator(&mut output[nwritten..]); + if result == csv_core::WriteResult::OutputFull { + return Err(Error::Overflow); + } + nwritten += n; + + Ok(nwritten) + } + + fn content_type(&self) -> &'static str { + "text/csv" + } +} + +/// This type represents all possible errors that can occur when serializing CSV data. +#[derive(Debug, PartialEq, Eq)] +pub enum Error { + /// Buffer overflow. + Overflow, +} + +pub type Result = std::result::Result; + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Overflow => write!(f, "Buffer overflow"), + } + } +} + +impl serde::ser::StdError for Error {} + +impl serde::ser::Error for Error { + fn custom(_msg: T) -> Self + where + T: std::fmt::Display, + { + unimplemented!("custom is not supported") + } +} + +/// A structure for serializing Rust values into CSV. +pub struct Serializer<'a> { + writer: &'a mut csv_core::Writer, + output: &'a mut [u8], + nwritten: usize, +} + +impl<'a> Serializer<'a> { + /// Creates a new CSV serializer. + pub fn new(writer: &'a mut csv_core::Writer, output: &'a mut [u8]) -> Self { + Self { + writer, + output, + nwritten: 0, + } + } + + fn field(&mut self, input: impl AsRef<[u8]>) -> Result<()> { + let (r, _, n) = self + .writer + .field(input.as_ref(), &mut self.output[self.nwritten..]); + self.nwritten += n; + if r == csv_core::WriteResult::OutputFull { + return Err(Error::Overflow); + } + Ok(()) + } + + fn delimiter(&mut self) -> Result<()> { + let (r, n) = self.writer.delimiter(&mut self.output[self.nwritten..]); + self.nwritten += n; + if r == csv_core::WriteResult::OutputFull { + return Err(Error::Overflow); + } + Ok(()) + } +} + +impl<'a, 'b> ser::Serializer for &'a mut Serializer<'b> { + type Ok = (); + + type Error = Error; + + type SerializeSeq = Compound<'a, 'b>; + + type SerializeTuple = Compound<'a, 'b>; + + type SerializeTupleStruct = Compound<'a, 'b>; + + type SerializeTupleVariant = Unreachable; + + type SerializeMap = Unreachable; + + type SerializeStruct = Compound<'a, 'b>; + + type SerializeStructVariant = Unreachable; + + fn serialize_bool(self, v: bool) -> Result { + if v { + self.field(b"true") + } else { + self.field(b"false") + } + } + + fn serialize_i8(self, v: i8) -> Result { + self.field(format!("{v}")) + } + + fn serialize_i16(self, v: i16) -> Result { + self.field(format!("{v}")) + } + + fn serialize_i32(self, v: i32) -> Result { + self.field(format!("{v}")) + } + + fn serialize_i64(self, v: i64) -> Result { + self.field(format!("{v}")) + } + + fn serialize_u8(self, v: u8) -> Result { + self.field(format!("{v}")) + } + + fn serialize_u16(self, v: u16) -> Result { + self.field(format!("{v}")) + } + + fn serialize_u32(self, v: u32) -> Result { + self.field(format!("{v}")) + } + + fn serialize_u64(self, v: u64) -> Result { + self.field(format!("{v}")) + } + + fn serialize_f32(self, v: f32) -> Result { + self.field(format!("{v}")) + } + + fn serialize_f64(self, v: f64) -> Result { + self.field(format!("{v}")) + } + + fn serialize_char(self, v: char) -> Result { + self.field(v.encode_utf8(&mut [0; 4])) + } + + fn serialize_str(self, v: &str) -> Result { + self.field(v) + } + + fn serialize_bytes(self, v: &[u8]) -> Result { + self.field(v) + } + + fn serialize_none(self) -> Result { + self.field([]) + } + + fn serialize_some(self, value: &T) -> Result + where + T: ser::Serialize, + { + value.serialize(self) + } + + fn serialize_unit(self) -> Result { + self.field([]) + } + + fn serialize_unit_struct(self, name: &'static str) -> Result { + self.field(name) + } + + fn serialize_unit_variant( + self, + _name: &'static str, + _variant_index: u32, + variant: &'static str, + ) -> Result { + self.field(variant) + } + + fn serialize_newtype_struct(self, _name: &'static str, value: &T) -> Result + where + T: ser::Serialize, + { + value.serialize(self) + } + + fn serialize_newtype_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + value: &T, + ) -> Result + where + T: ser::Serialize, + { + value.serialize(self) + } + + fn serialize_seq(self, _len: Option) -> Result { + Ok(Compound::new(self)) + } + + fn serialize_tuple(self, _len: usize) -> Result { + Ok(Compound::new(self)) + } + + fn serialize_tuple_struct( + self, + _name: &'static str, + _len: usize, + ) -> Result { + Ok(Compound::new(self)) + } + + fn serialize_tuple_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unimplemented!("`Serializer::serialize_tuple_variant` is not supported"); + } + + fn serialize_map(self, _len: Option) -> Result { + unimplemented!("`Serializer::serialize_map` is not supported"); + } + + fn serialize_struct(self, _name: &'static str, _len: usize) -> Result { + Ok(Compound::new(self)) + } + + fn serialize_struct_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unimplemented!("`Serializer::serialize_struct_variant` is not supported"); + } + + fn collect_str(self, _value: &T) -> Result + where + T: std::fmt::Display, + { + unimplemented!("`Serializer::collect_str` is not supported"); + } +} + +#[doc(hidden)] +pub struct Compound<'a, 'b> { + serializer: &'a mut Serializer<'b>, + nfields: usize, +} + +impl<'a, 'b> Compound<'a, 'b> { + fn new(serializer: &'a mut Serializer<'b>) -> Self { + Self { + serializer, + nfields: 0, + } + } + + fn element(&mut self, value: &T) -> Result<()> + where + T: ser::Serialize, + { + if self.nfields > 0 { + self.serializer.delimiter()?; + } + self.nfields += 1; + value.serialize(&mut *self.serializer) + } +} + +impl ser::SerializeSeq for Compound<'_, '_> { + type Ok = (); + + type Error = Error; + + fn serialize_element(&mut self, value: &T) -> Result<()> + where + T: ser::Serialize, + { + self.element(value) + } + + fn end(self) -> Result { + Ok(()) + } +} + +impl ser::SerializeTuple for Compound<'_, '_> { + type Ok = (); + + type Error = Error; + + fn serialize_element(&mut self, value: &T) -> Result<()> + where + T: ser::Serialize, + { + self.element(value) + } + + fn end(self) -> Result { + Ok(()) + } +} + +impl ser::SerializeTupleStruct for Compound<'_, '_> { + type Ok = (); + + type Error = Error; + + fn serialize_field(&mut self, value: &T) -> Result<()> + where + T: ser::Serialize, + { + self.element(value) + } + + fn end(self) -> Result { + Ok(()) + } +} + +impl ser::SerializeStruct for Compound<'_, '_> { + type Ok = (); + + type Error = Error; + + fn serialize_field(&mut self, _key: &'static str, value: &T) -> Result<()> + where + T: ser::Serialize, + { + self.element(value) + } + + fn end(self) -> Result { + Ok(()) + } +} + +#[doc(hidden)] +pub struct Unreachable; + +impl ser::SerializeTupleVariant for Unreachable { + type Ok = (); + + type Error = Error; + + fn serialize_field(&mut self, _value: &T) -> Result<()> + where + T: ser::Serialize, + { + unreachable!() + } + + fn end(self) -> Result { + unreachable!() + } +} + +impl ser::SerializeMap for Unreachable { + type Ok = (); + + type Error = Error; + + fn serialize_key(&mut self, _key: &T) -> Result<()> + where + T: ser::Serialize, + { + unreachable!() + } + + fn serialize_value(&mut self, _value: &T) -> Result<()> + where + T: ser::Serialize, + { + unreachable!() + } + + fn end(self) -> Result { + unreachable!() + } +} + +impl ser::SerializeStructVariant for Unreachable { + type Ok = (); + + type Error = Error; + + fn serialize_field(&mut self, _key: &'static str, _value: &T) -> Result<()> + where + T: ser::Serialize, + { + unreachable!() + } + + fn end(self) -> Result { + unreachable!() + } +} diff --git a/crates/runtime/src/formats/json/de.rs b/crates/runtime/src/formats/json/de.rs new file mode 100644 index 0000000..aa6d884 --- /dev/null +++ b/crates/runtime/src/formats/json/de.rs @@ -0,0 +1,26 @@ +use serde_json::Deserializer; + +use crate::formats::Decode; + +#[derive(Default)] +pub struct Reader {} + +impl Reader { + pub fn new() -> Self { + Self::default() + } +} + +impl Decode for Reader { + type Error = serde_json::Error; + + fn decode<'de, T>(&mut self, input: &'de [u8]) -> Result + where + T: serde::Deserialize<'de>, + { + let mut deserializer = Deserializer::from_slice(input); + let value = T::deserialize(&mut deserializer)?; + deserializer.end()?; + Ok(value) + } +} diff --git a/crates/runtime/src/formats/json/ser.rs b/crates/runtime/src/formats/json/ser.rs new file mode 100644 index 0000000..a48d557 --- /dev/null +++ b/crates/runtime/src/formats/json/ser.rs @@ -0,0 +1,27 @@ +use crate::formats::Encode; + +#[derive(Default)] +pub struct Writer {} + +impl Writer { + pub fn new() -> Self { + Self {} + } +} + +impl Encode for Writer { + type Error = serde_json::Error; + + fn encode(&mut self, input: &T, output: &mut Vec) -> Result + where + T: serde::Serialize + ?Sized, + { + let mut serializer = serde_json::Serializer::new(output); + input.serialize(&mut serializer)?; + Ok(1) + } + + fn content_type(&self) -> &'static str { + "application/json" + } +} diff --git a/crates/runtime/src/formats/mod.rs b/crates/runtime/src/formats/mod.rs new file mode 100644 index 0000000..4cf33c8 --- /dev/null +++ b/crates/runtime/src/formats/mod.rs @@ -0,0 +1,27 @@ +use serde::Deserialize; +use serde::Serialize; + +pub mod csv { + pub mod de; + pub mod ser; +} + +pub mod json { + pub mod de; + pub mod ser; +} + +pub trait Decode { + type Error: std::error::Error + Send; + fn decode<'de, T>(&mut self, input: &'de [u8]) -> Result + where + T: Deserialize<'de>; +} + +pub trait Encode { + type Error: std::error::Error + Send; + fn encode(&mut self, input: &T, output: &mut Vec) -> Result + where + T: Serialize; + fn content_type(&self) -> &'static str; +} diff --git a/crates/runtime/src/lib.rs b/crates/runtime/src/lib.rs new file mode 100644 index 0000000..5264e4e --- /dev/null +++ b/crates/runtime/src/lib.rs @@ -0,0 +1,82 @@ +pub mod builtins; +pub mod formats; +pub mod runner; +// pub mod state; +pub mod traits; +// pub mod logging; + +#[cfg(feature = "opt")] +type Hasher = std::hash::BuildHasherDefault; + +#[cfg(not(feature = "opt"))] +type Hasher = std::collections::hash_map::RandomState; + +// #[cfg(feature = "opt")] +// pub type BTreeMap = btree_slab::BTreeMap; +// +// #[cfg(not(feature = "opt"))] +pub type BTreeMap = std::collections::BTreeMap; + +pub type HashMap = std::collections::HashMap; + +pub type SmolHashMap = halfbrown::HashMap; +pub type SmolVec = smallvec::SmallVec; + +#[cfg(all(not(target_env = "msvc"), feature = "opt"))] +#[global_allocator] +static GLOBAL: jemalloc::Jemalloc = jemalloc::Jemalloc; + +pub mod prelude { + pub use macros::data; + pub use macros::unwrap; + pub use macros::DeepClone; + pub use macros::New; + pub use macros::Send; + pub use macros::Sync; + pub use macros::Timestamp; + pub use macros::Unpin; + + pub use crate::builtins::aggregator::Aggregator; + pub use crate::builtins::array::Array; + pub use crate::builtins::assigner::Assigner; + pub use crate::builtins::blob::Blob; + pub use crate::builtins::dict::Dict; + pub use crate::builtins::duration::Duration; + pub use crate::builtins::encoding::Encoding; + pub use crate::builtins::file::File; + // pub use crate::builtins::image::Image; + pub use crate::builtins::keyed_stream::KeyedStream; + // pub use crate::builtins::matrix::Matrix; + pub use crate::builtins::im_string::String; + // pub use crate::builtins::option::Option; + pub use crate::builtins::path::Path; + pub use crate::builtins::reader::Reader; + pub use crate::builtins::result::Result; + pub use crate::builtins::set::Set; + pub use crate::builtins::socket::SocketAddr; + pub use crate::builtins::stream::Stream; + pub use crate::builtins::time::Time; + pub use crate::builtins::time_source::TimeSource; + // pub use crate::builtins::url::Url; + pub use crate::builtins::vec::Vec; + pub use crate::builtins::writer::Writer; + pub use crate::traits::Data; + pub use crate::traits::DeepClone; + + // #[cfg(feature = "model")] + // pub use crate::builtins::model::Model; + + pub use crate::runner::context::Context; + pub use crate::runner::current_thread::CurrentThreadRunner; + pub use crate::runner::data_parallel::DataParallelRunner; + pub use crate::runner::task_parallel::TaskParallelRunner; + + // pub use crate::state::Database; + // pub use crate::state::State; + + pub use serde; + pub use tokio; + + pub use crate::builtins::stream; + pub use crate::formats; +} diff --git a/crates/runtime/src/logging/mod.rs b/crates/runtime/src/logging/mod.rs new file mode 100644 index 0000000..fa7c1df --- /dev/null +++ b/crates/runtime/src/logging/mod.rs @@ -0,0 +1,22 @@ +use std::path::PathBuf; +use std::str::FromStr; + +use tracing_subscriber::prelude::*; + +#[cfg(debug_assertions)] +pub const FILTER: &str = "info,librdkafka=off,rdkafka::client=off"; + +#[cfg(not(debug_assertions))] +pub const FILTER: &str = "warn,librdkafka=off,rdkafka::client=off"; + +pub fn init(path: impl Into) { + let file = std::fs::File::create(path.into()).expect("failed to create log file"); + let fmt = tracing_subscriber::fmt::layer() + .with_file(false) + .with_line_number(false) + .with_ansi(false) + .compact() + .with_writer(file) + .with_filter(tracing_subscriber::filter::EnvFilter::from_str(FILTER).unwrap()); + tracing_subscriber::registry().with(fmt).init(); +} diff --git a/crates/runtime/src/runner/context.rs b/crates/runtime/src/runner/context.rs new file mode 100644 index 0000000..8dcb346 --- /dev/null +++ b/crates/runtime/src/runner/context.rs @@ -0,0 +1,149 @@ +use futures::Future; + +use crate::builtins::keyed_stream::KeyedCollector; +use crate::builtins::keyed_stream::KeyedStream; +use crate::builtins::stream::Collector; +use crate::builtins::stream::Stream; +use crate::traits::Data; + +pub struct Context { + join_set: tokio::task::JoinSet<()>, + local_set: Option, + tx: tokio::sync::broadcast::Sender<()>, + rx: tokio::sync::broadcast::Receiver<()>, +} + +impl Default for Context { + fn default() -> Self { + let (tx, rx) = tokio::sync::broadcast::channel(1); + Self { + join_set: tokio::task::JoinSet::new(), + local_set: None, + tx, + rx, + } + } +} + +impl Context { + pub fn new() -> Self { + Self::default() + } + + pub async fn run_local(f: impl FnOnce(&mut Context)) -> Self { + let mut ctx = Self::new(); + let local_set = tokio::task::LocalSet::new(); + local_set.run_until(async { f(&mut ctx) }).await; + ctx.local_set = Some(local_set); + ctx + } + + pub fn run(f: impl FnOnce(&mut Context) + Send + 'static) -> Self { + let mut ctx = Self::new(); + f(&mut ctx); + ctx + } + + pub async fn await_termination(mut self) { + self.tx.send(()).unwrap(); + while let Some(result) = self.join_set.join_next().await { + result.expect("Task should not panic."); + } + if let Some(local_set) = self.local_set { + local_set.await; + } + } + + pub fn spawn(&mut self, f: F) + where + F: Future + Send + 'static, + { + let mut rx = self.rx.resubscribe(); + self.join_set.spawn(async move { + rx.recv().await.expect("Channel should not be closed."); + f.await + }); + } + + pub fn operator(&mut self, f: impl FnOnce(Collector) -> F) -> Stream + where + F: Future + Send + 'static, + T: Data, + { + let (tx, rx) = Stream::new(); + self.spawn(f(tx)); + rx + } + + pub fn keyed_operator( + &mut self, + f: impl FnOnce(KeyedCollector) -> F, + ) -> KeyedStream + where + F: Future + Send + 'static, + K: Data, + T: Data, + { + let (tx, rx) = KeyedStream::new(); + self.spawn(f(tx)); + rx + } + + pub fn co_operator( + &mut self, + f: impl FnOnce(Collector, Collector) -> F, + ) -> (Stream, Stream) + where + F: Future + Send + 'static, + T0: Data, + T1: Data, + { + let (tx0, rx0) = Stream::new(); + let (tx1, rx1) = Stream::new(); + self.spawn(f(tx0, tx1)); + (rx0, rx1) + } + + pub fn keyed_co_operator( + &mut self, + f: impl FnOnce(KeyedCollector, KeyedCollector) -> F, + ) -> (KeyedStream, KeyedStream) + where + F: Future + Send + 'static, + T0: Data, + T1: Data, + K0: Data, + K1: Data, + { + let (tx0, rx0) = KeyedStream::new(); + let (tx1, rx1) = KeyedStream::new(); + self.spawn(f(tx0, tx1)); + (rx0, rx1) + } + + pub fn sink(&mut self, f: impl FnOnce() -> F) + where + F: Future + Send + 'static, + { + self.spawn(f()); + } +} + +pub fn array_unzip(f: impl Fn() -> (A, B)) -> ([A; N], [B; N]) { + let mut a0: [std::mem::MaybeUninit; N] = + unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + let mut a1: [std::mem::MaybeUninit; N] = + unsafe { std::mem::MaybeUninit::uninit().assume_init() }; + + for (l, r) in a0[..].iter_mut().zip(a1.iter_mut()) { + let (tx, rx) = f(); + unsafe { + std::ptr::write(l.as_mut_ptr(), tx); + std::ptr::write(r.as_mut_ptr(), rx); + } + } + + let a0 = unsafe { std::mem::transmute_copy::<[std::mem::MaybeUninit; N], [A; N]>(&a0) }; + let a1 = unsafe { std::mem::transmute_copy::<[std::mem::MaybeUninit; N], [B; N]>(&a1) }; + (a0, a1) +} diff --git a/crates/runtime/src/runner/current_thread.rs b/crates/runtime/src/runner/current_thread.rs new file mode 100644 index 0000000..b52de10 --- /dev/null +++ b/crates/runtime/src/runner/current_thread.rs @@ -0,0 +1,18 @@ +use crate::runner::context::Context; + +pub struct CurrentThreadRunner {} + +impl CurrentThreadRunner { + pub fn run(f: impl FnOnce(&mut Context)) { + let future = async { + let ctx = Context::run_local(f).await; + ctx.await_termination().await + }; + tokio::runtime::Builder::new_current_thread() + .unhandled_panic(tokio::runtime::UnhandledPanic::ShutdownRuntime) + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(future); + } +} diff --git a/crates/runtime/src/runner/data_parallel.rs b/crates/runtime/src/runner/data_parallel.rs new file mode 100644 index 0000000..419d437 --- /dev/null +++ b/crates/runtime/src/runner/data_parallel.rs @@ -0,0 +1,42 @@ +use crate::runner::context::Context; + +pub struct DataParallelRunner { + txs: Vec>, + threads: Vec>, +} + +impl DataParallelRunner { + pub fn new( + args: [T; N], + f: impl Fn(T, &mut Context) + Clone + Send + 'static, + ) -> Self { + let mut threads = Vec::with_capacity(args.len()); + let mut txs = Vec::with_capacity(args.len()); + for arg in args { + let f = f.clone(); + let (runner_tx, runner_rx) = std::sync::mpsc::channel(); + txs.push(runner_tx); + threads.push(std::thread::spawn(move || { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(async { + let ctx = Context::run_local(|ctx| f(arg, ctx)).await; + runner_rx.recv().unwrap(); + ctx.await_termination().await; + }); + })); + } + Self { txs, threads } + } + + pub fn run(mut self) { + for tx in self.txs.iter() { + tx.send(()).unwrap(); + } + for thread in self.threads.drain(..) { + thread.join().expect("Failed to join thread"); + } + } +} diff --git a/crates/runtime/src/runner/env.rs b/crates/runtime/src/runner/env.rs new file mode 100644 index 0000000..29ca14f --- /dev/null +++ b/crates/runtime/src/runner/env.rs @@ -0,0 +1,4 @@ +pub struct Context { + join_set: tokio::task::JoinSet<()>, + start: tokio::sync::broadcast::Receiver<()>, +} diff --git a/crates/runtime/src/runner/mod.rs b/crates/runtime/src/runner/mod.rs new file mode 100644 index 0000000..415e90a --- /dev/null +++ b/crates/runtime/src/runner/mod.rs @@ -0,0 +1,8 @@ +pub mod data_parallel; +pub mod task_parallel; +pub mod context; + +// #[cfg(feature = "thread-pinning")] +// pub mod pinned_data_parallel; + +pub mod current_thread; diff --git a/crates/runtime/src/runner/pinned_data_parallel.rs b/crates/runtime/src/runner/pinned_data_parallel.rs new file mode 100644 index 0000000..f3341d7 --- /dev/null +++ b/crates/runtime/src/runner/pinned_data_parallel.rs @@ -0,0 +1,78 @@ +use tokio::task::JoinSet; + +pub struct PinnedDataParallelRunner { + topology: std::sync::Arc>, + threads: Vec>, +} + +impl PinnedDataParallelRunner { + pub fn new() -> Self { + Self { + topology: std::sync::Arc::new(std::sync::Mutex::new(hwloc::Topology::new())), + threads: Vec::new(), + } + } + + pub fn spawn_current_thread(&mut self, f: impl Fn(&mut JoinSet<()>)) -> &mut Self { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(async { + let mut join_set = JoinSet::<()>::new(); + let local_set = tokio::task::LocalSet::new(); + local_set.run_until(async { f(&mut join_set) }).await; + while let Some(_) = join_set.join_next().await {} + local_set.await; + }); + self + } + + pub fn spawn_pinned( + &mut self, + f: impl Fn(&mut JoinSet<()>) + Send + 'static, + _cpu_id: usize, + ) -> &mut Self { + let topology = self.topology.clone(); + self.threads.push(std::thread::spawn(move || { + bind_thread_to_cpu(_cpu_id, topology); + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(async { + let mut join_set = JoinSet::<()>::new(); + let local_set = tokio::task::LocalSet::new(); + local_set.run_until(async { f(&mut join_set) }).await; + while let Some(_) = join_set.join_next().await {} + local_set.await; + }); + })); + self + } + + pub fn await_termination(self) { + drop(self) + } +} + +fn bind_thread_to_cpu( + _cpu_id: usize, + _topology: std::sync::Arc>, +) { + let thread_id = unsafe { libc::pthread_self() }; + let mut topology = topology.lock().unwrap(); + let cpus = topology.objects_with_type(&ObjectType::Core).unwrap(); + let cpuset = cpus.get(_cpu_id).expect("Core not found").cpuset().unwrap(); + _topology + .set_cpubind_for_thread(thread_id, cpuset, CPUBIND_THREAD) + .unwrap(); +} + +impl Drop for PinnedDataParallelRunner { + fn drop(&mut self) { + for thread in self.threads.drain(..) { + thread.join().expect("Failed to join thread"); + } + } +} diff --git a/crates/runtime/src/runner/single_thread.rs b/crates/runtime/src/runner/single_thread.rs new file mode 100644 index 0000000..d25eee7 --- /dev/null +++ b/crates/runtime/src/runner/single_thread.rs @@ -0,0 +1,21 @@ +use crate::context::Context; + +pub struct CurrentThreadRunner {} + +impl CurrentThreadRunner { + pub fn run(f: impl Fn(&mut Context)) { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(async { + let (tx, rx) = tokio::sync::broadcast::channel(1); + let mut ctx = Context::new(rx); + let local_set = tokio::task::LocalSet::new(); + local_set.run_until(async { f(&mut ctx) }).await; + tx.send(()).unwrap(); + while let Some(_) = ctx.join_set.join_next().await {} + local_set.await; + }); + } +} diff --git a/crates/runtime/src/runner/task_parallel.rs b/crates/runtime/src/runner/task_parallel.rs new file mode 100644 index 0000000..02cf202 --- /dev/null +++ b/crates/runtime/src/runner/task_parallel.rs @@ -0,0 +1,25 @@ +use crate::runner::context::Context; + +pub struct TaskParallelRunner { + tx: std::sync::mpsc::SyncSender<()>, +} + +impl TaskParallelRunner { + pub fn new(f: impl FnOnce(&mut Context) + Send + 'static) -> Self { + let (tx, rx) = std::sync::mpsc::sync_channel::<()>(1); + tokio::runtime::Builder::new_multi_thread() + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(async { + let ctx = Context::run(f); + rx.recv().unwrap(); + ctx.await_termination().await; + }); + Self { tx } + } + + pub fn run(self) { + self.tx.send(()).unwrap(); + } +} diff --git a/crates/runtime/src/runner/threadpool.rs b/crates/runtime/src/runner/threadpool.rs new file mode 100644 index 0000000..2d4109d --- /dev/null +++ b/crates/runtime/src/runner/threadpool.rs @@ -0,0 +1,88 @@ +#![allow(unused)] + +use std::future::Future; +use std::path::Path; + +use logging::Logger; + +pub struct TaskParallelRunner { + #[cfg(feature = "thread-pinning")] + topology: std::sync::Arc>, + threads: Vec>, + logger: Logger, +} + +impl TaskParallelRunner { + pub fn new(logger: Logger) -> Self { + Self { + #[cfg(feature = "thread-pinning")] + topology: std::sync::Arc::new(std::sync::Mutex::new(hwloc::Topology::new())), + threads: Vec::new(), + logger, + } + } + + pub fn spawn(&mut self, f: impl Fn() + Send + 'static) -> &mut Self { + self.threads.push(std::thread::spawn(move || { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("Failed to build runtime") + .block_on(async { + let set = tokio::task::LocalSet::new(); + set.run_until(async { f() }).await; + set.await; + }); + })); + self + } + + pub fn spawn_pinned(&mut self, f: impl Fn() + Send + 'static, _cpu_id: usize) -> &mut Self { + #[cfg(feature = "thread-pinning")] + let topology = self.topology.clone(); + self.threads.push(std::thread::spawn(move || { + #[cfg(feature = "thread-pinning")] + bind_thread_to_cpu(_cpu_id, topology); + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() + .block_on(async { + let set = tokio::task::LocalSet::new(); + set.run_until(async { f() }).await; + set.await; + }); + })); + self + } + + pub fn await_termination(self) { + drop(self) + } +} + +#[cfg(feature = "thread-pinning")] +fn bind_thread_to_cpu( + _cpu_id: usize, + _topology: std::sync::Arc>, +) { + cfg_if::cfg_if! { + if #[cfg(target_os = "linux")] { + let thread_id = unsafe { libc::pthread_self() }; + let mut topology = topology.lock().unwrap(); + let cpus = topology.objects_with_type(&ObjectType::Core).unwrap(); + let cpuset = cpus.get(_cpu_id).expect("Core not found").cpuset().unwrap(); + _topology + .set_cpubind_for_thread(thread_id, cpuset, CPUBIND_THREAD) + .unwrap(); + } + } +} + +impl Drop for TaskParallelRunner { + fn drop(&mut self) { + for thread in self.threads.drain(..) { + thread.join().expect("Failed to join thread"); + } + } +} diff --git a/crates/runtime/src/state/mod.rs b/crates/runtime/src/state/mod.rs new file mode 100644 index 0000000..dada59b --- /dev/null +++ b/crates/runtime/src/state/mod.rs @@ -0,0 +1,111 @@ +#![allow(unused)] + +use std::collections::HashMap; +use std::hash::Hash; +use std::ops::Index; +use std::ops::IndexMut; +use std::path::PathBuf; + +use serde::de::DeserializeOwned; +use serde::Serialize; + +use crate::traits::Data; +use crate::traits::Key; + +#[derive(Clone)] +pub struct Database( + // tikv_client::RawClient, + sled::Db, + // HashMap, +); + +impl Database { + // #[cfg(feature = "tikv")] + // pub fn new(addr: &str) -> Self { + // let db = tokio::runtime::Runtime::new() + // .expect("failed to create runtime") + // .block_on(tikv_client::RawClient::new(vec![addr]).await) + // .expect("Failed to connect to tikv"); + // Self(db) + // } + + // #[cfg(feature = "local")] + pub fn new(path: impl AsRef) -> Self { + let db = sled::open(path).expect("Failed to connect to sled"); + Self(db) + } + + // #[cfg(not(any(feature = "tikv", feature = "sled")))] + // pub fn new(path: &str) -> Self { + // let db = sled::open(path).expect("Failed to connect to sled"); + // Self(db) + // } +} + +#[derive(Clone)] +pub struct State { + name: String, + db: Database, + uncommitted: HashMap, + default: T, +} + +impl State { + pub fn new(name: impl ToString, db: Database, default: T) -> Self { + Self { + name: name.to_string(), + db, + uncommitted: HashMap::new(), + default, + } + } + pub fn iter_mut(&mut self) -> impl Iterator { + self.uncommitted.iter_mut() + } + // #[cfg(feature = "remote")] + // pub async fn snapshot(&mut self, snapshot_version: usize) { + // let name = &self.name; + // let batch = self.uncommitted.iter().filter_map(|(key, data)| { + // let key = ser((name, key)).ok()?; + // let data = ser(data).ok()?; + // Some((key, data)) + // }); + // db.batch_put(batch).await.expect("tikv: failed to insert") + // } + pub async fn snapshot(&mut self, snapshot_version: usize) { + self.uncommitted + .iter() + .filter_map(|(key, data)| { + let key = ser((key, snapshot_version)).ok()?; + let data = ser(data).ok()?; + Some((key, data)) + }) + .for_each(|(key, data)| { + self.db.0.insert(key, data).expect("sled: failed to insert"); + }); + } +} + +impl IndexMut for State { + fn index_mut(&mut self, key: K) -> &mut T { + let default = &self.default; + self.uncommitted + .entry(key) + .or_insert_with(|| default.clone()) + } +} + +impl Index for State { + type Output = T; + fn index(&self, key: K) -> &T { + self.uncommitted.get(&key).unwrap_or(&self.default) + } +} + +pub fn ser(v: T) -> Result, serde_json::Error> { + serde_json::to_vec(&v) +} + +pub fn deser(v: Option>) -> Result, serde_json::Error> { + v.map(|v| serde_json::from_slice(&v)).transpose() +} diff --git a/crates/runtime/src/traits/mod.rs b/crates/runtime/src/traits/mod.rs new file mode 100644 index 0000000..7c8253b --- /dev/null +++ b/crates/runtime/src/traits/mod.rs @@ -0,0 +1,125 @@ +use serde::Deserialize; +use serde::Serialize; +use std::fmt::Debug; +use std::hash::Hash; + +use crate::builtins::time::Time; + +pub trait Data: + DeepClone + Clone + Send + Sync + Serialize + for<'a> Deserialize<'a> + Unpin + Debug + 'static +{ +} +impl Data for T where + T: DeepClone + + Clone + + Send + + Sync + + Serialize + + for<'a> Deserialize<'a> + + Unpin + + Debug + + 'static +{ +} + +pub trait Key: Data + Eq + PartialEq + Hash {} +impl Key for T where T: Data + Eq + PartialEq + Hash {} + +pub trait DeepClone: Clone { + fn deep_clone(&self) -> Self; +} + +macro_rules! impl_deep_clone_tuple { + { $h:ident $(, $t:ident)* } => { + impl<$h: DeepClone, $($t: DeepClone),*> DeepClone for ($h, $($t,)*) { + #[allow(non_snake_case)] + fn deep_clone(&self) -> Self { + let ($h, $($t,)*) = self; + ($h.deep_clone(), $($t.deep_clone(),)*) + } + } + impl_deep_clone_tuple! { $($t),* } + }; + {} => {} +} + +impl_deep_clone_tuple!(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10); + +impl DeepClone for std::rc::Rc { + fn deep_clone(&self) -> Self { + std::rc::Rc::new(self.as_ref().deep_clone()) + } +} + +impl DeepClone for std::sync::Arc { + fn deep_clone(&self) -> Self { + std::sync::Arc::new(self.as_ref().deep_clone()) + } +} + +impl DeepClone for std::vec::Vec { + fn deep_clone(&self) -> Self { + self.iter().map(|x| x.deep_clone()).collect() + } +} + +impl DeepClone for std::string::String { + fn deep_clone(&self) -> Self { + self.clone() + } +} + +impl DeepClone for std::result::Result { + fn deep_clone(&self) -> Self { + match self { + std::result::Result::Ok(x) => std::result::Result::Ok(x.deep_clone()), + std::result::Result::Err(x) => std::result::Result::Err(x.deep_clone()), + } + } +} + +impl DeepClone for std::option::Option { + fn deep_clone(&self) -> Self { + self.as_ref().map(|x| x.deep_clone()) + } +} + +impl DeepClone for std::cell::RefCell { + fn deep_clone(&self) -> Self { + std::cell::RefCell::new(self.borrow().deep_clone()) + } +} + +macro_rules! impl_deep_clone_scalar { + { $t:ty } => { + impl DeepClone for $t { + #[inline(always)] + fn deep_clone(&self) -> Self { + *self + } + } + }; +} + +impl_deep_clone_scalar! { () } +impl_deep_clone_scalar! { bool } +impl_deep_clone_scalar! { i8 } +impl_deep_clone_scalar! { i16 } +impl_deep_clone_scalar! { i32 } +impl_deep_clone_scalar! { i64 } +impl_deep_clone_scalar! { i128 } +impl_deep_clone_scalar! { isize } +impl_deep_clone_scalar! { u8 } +impl_deep_clone_scalar! { u16 } +impl_deep_clone_scalar! { u32 } +impl_deep_clone_scalar! { u64 } +impl_deep_clone_scalar! { u128 } +impl_deep_clone_scalar! { usize } +impl_deep_clone_scalar! { f32 } +impl_deep_clone_scalar! { f64 } +impl_deep_clone_scalar! { char } +impl_deep_clone_scalar! { &'static str } + +pub trait Timestamp { + fn timestamp(&self) -> Time; +} diff --git a/crates/runtime/tests/window.rs b/crates/runtime/tests/window.rs new file mode 100644 index 0000000..2f42a76 --- /dev/null +++ b/crates/runtime/tests/window.rs @@ -0,0 +1,32 @@ +use runtime::prelude::stream::Event; +use runtime::prelude::*; + +#[data] +struct Data { + value: T, + time: Time, +} + +#[ignore] +#[test] +fn test_tumbling_holistic0() { + CurrentThreadRunner::run(|ctx| { + let events = (0..1000).map(|i| Data::new(i, Time::zero())); + Stream::from_iter(ctx, events, |e| e.time, 100, Duration::zero()) + .time_tumbling_holistic_window(ctx, Duration::from_seconds(100), |data, _| { + let sum = data.iter().map(|d| d.value).sum::(); + let min = data.iter().map(|d| d.value).min().unwrap(); + let max = data.iter().map(|d| d.value).max().unwrap(); + (sum, min, max) + }) + .assert( + ctx, + [ + Event::Watermark(Time::zero()), + Event::Data(Time::zero(), (0, 0, 0)), + Event::Data(Time::zero(), (0, 0, 0)), + Event::Data(Time::zero(), (0, 0, 0)), + ], + ); + }); +} diff --git a/crates/tree-sitter-aqua/.gitignore b/crates/tree-sitter-aqua/.gitignore new file mode 100644 index 0000000..aa8afe6 --- /dev/null +++ b/crates/tree-sitter-aqua/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +target/ diff --git a/crates/tree-sitter-aqua/Cargo.lock b/crates/tree-sitter-aqua/Cargo.lock new file mode 100644 index 0000000..866073f --- /dev/null +++ b/crates/tree-sitter-aqua/Cargo.lock @@ -0,0 +1,170 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" + +[[package]] +name = "syn" +version = "2.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tree-sitter" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d" +dependencies = [ + "cc", + "regex", +] + +[[package]] +name = "tree-sitter-aqua" +version = "0.0.1" +dependencies = [ + "ansi_term", + "cc", + "tree-sitter", + "tree-sitter-highlight", +] + +[[package]] +name = "tree-sitter-highlight" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "042342584c5a7a0b833d9fc4e2bdab3f9868ddc6c4b339a1e01451c6720868bc" +dependencies = [ + "regex", + "thiserror", + "tree-sitter", +] + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/crates/tree-sitter-aqua/Cargo.toml b/crates/tree-sitter-aqua/Cargo.toml new file mode 100644 index 0000000..f805cad --- /dev/null +++ b/crates/tree-sitter-aqua/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "tree-sitter-aqua" +version.workspace = true +edition.workspace = true +build = "bindings/rust/build.rs" +include = [ + "bindings/rust/*", + "grammar.js", + "queries/*", + "src/*", +] + +[lib] +path = "bindings/rust/lib.rs" + +[dependencies] +tree-sitter = "0.20.10" +tree-sitter-highlight = "0.20.1" +tree-sitter-traversal = "0.1.2" +ansi_term = "0.12.1" +ariadne = "0.4.0" + +[build-dependencies] +cc = "1.0.83" diff --git a/crates/tree-sitter-aqua/binding.gyp b/crates/tree-sitter-aqua/binding.gyp new file mode 100644 index 0000000..ccdcf3f --- /dev/null +++ b/crates/tree-sitter-aqua/binding.gyp @@ -0,0 +1,19 @@ +{ + "targets": [ + { + "target_name": "tree_sitter_aqua_binding", + "include_dirs": [ + " +#include "nan.h" + +using namespace v8; + +extern "C" TSLanguage * tree_sitter_aqua(); + +namespace { + +NAN_METHOD(New) {} + +void Init(Local exports, Local module) { + Local tpl = Nan::New(New); + tpl->SetClassName(Nan::New("Language").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); + Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); + Nan::SetInternalFieldPointer(instance, 0, tree_sitter_aqua()); + + Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("aqua").ToLocalChecked()); + Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +} + +NODE_MODULE(tree_sitter_aqua_binding, Init) + +} // namespace diff --git a/crates/tree-sitter-aqua/bindings/node/index.js b/crates/tree-sitter-aqua/bindings/node/index.js new file mode 100644 index 0000000..49b4f06 --- /dev/null +++ b/crates/tree-sitter-aqua/bindings/node/index.js @@ -0,0 +1,19 @@ +try { + module.exports = require("../../build/Release/tree_sitter_aqua_binding"); +} catch (error1) { + if (error1.code !== 'MODULE_NOT_FOUND') { + throw error1; + } + try { + module.exports = require("../../build/Debug/tree_sitter_aqua_binding"); + } catch (error2) { + if (error2.code !== 'MODULE_NOT_FOUND') { + throw error2; + } + throw error1 + } +} + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/crates/tree-sitter-aqua/bindings/rust/build.rs b/crates/tree-sitter-aqua/bindings/rust/build.rs new file mode 100644 index 0000000..3946bad --- /dev/null +++ b/crates/tree-sitter-aqua/bindings/rust/build.rs @@ -0,0 +1,15 @@ +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"); + let parser_path = src_dir.join("parser.c"); + c_config.file(&parser_path); + + c_config.compile("parser"); + println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); +} diff --git a/crates/tree-sitter-aqua/bindings/rust/lib.rs b/crates/tree-sitter-aqua/bindings/rust/lib.rs new file mode 100644 index 0000000..16bc94f --- /dev/null +++ b/crates/tree-sitter-aqua/bindings/rust/lib.rs @@ -0,0 +1,145 @@ +//! This crate provides arc-lang language support for the [tree-sitter][] parsing library. +//! +//! Typically, you will use the [language][language func] function to add this language to a +//! tree-sitter [Parser][], and then use the parser to parse some code: +//! +//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +//! [language func]: fn.language.html +//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +//! [tree-sitter]: https://tree-sitter.github.io/ + +use ariadne::Config; +use ariadne::Label; +use ariadne::ReportKind; +use ariadne::Source; +use tree_sitter::Language; +use tree_sitter_traversal::traverse; +use tree_sitter_traversal::Order; + +extern "C" { + fn tree_sitter_aqua() -> Language; +} + +/// 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_aqua() } +} + +/// 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"); + +/// Queries for syntax highlighting and other language features. +pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/aqua/highlights.scm"); +pub const INJECTIONS_QUERY: &str = include_str!("../../queries/aqua/injections.scm"); +pub const LOCALS_QUERY: &str = include_str!("../../queries/aqua/locals.scm"); +pub const TAGS_QUERY: &str = include_str!("../../queries/aqua/tags.scm"); +pub const HIGHLIGHT_NAMES: &[&str] = &[ + "string", + "number", + "boolean", + "comment", + "keyword", + "function", + "variable", + "type", + "type.builtin", + "conditional", + "repeat", + "punctuation", + "operator", +]; + +pub struct TreeSitterError(String); + +impl std::fmt::Debug for TreeSitterError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +pub fn check(path: &str, source: &str) -> Result<(), TreeSitterError> { + let mut parser = tree_sitter::Parser::new(); + parser.set_language(language()).unwrap(); + let tree = parser.parse(source, None).unwrap(); + let iter = traverse(tree.walk(), Order::Pre); + let conf = Config::default().with_color(false); + let mut cache = (path, Source::from(source)); + let mut buffer = Vec::::new(); + iter.filter_map(|node| { + if node.is_error() { + Some(node.range()) + } else { + None + } + }) + .for_each(|r| { + ariadne::Report::build(ReportKind::Error, path, 0) + .with_message("Tree-sitter parse error") + .with_label(Label::new((path, r.start_byte..r.end_byte)).with_message("Parse error")) + .with_config(conf) + .finish() + .write(&mut cache, &mut buffer) + .unwrap(); + }); + if buffer.is_empty() { + Ok(()) + } else { + Err(TreeSitterError(String::from_utf8(buffer).unwrap())) + } +} +// format!( +// "[{r0}:{c0}-{r1}:{c1}]: {s}", +// r0 = range.start_point.row, +// c0 = range.start_point.column, +// r1 = range.end_point.row, +// c1 = range.end_point.column, +// s = &source[range.start_byte..range.end_byte], +// ) + +#[cfg(test)] +mod tests { + use tree_sitter_highlight::HighlightConfiguration; + use tree_sitter_highlight::Highlighter; + + #[test] + fn can_highlight() { + let code = "def foo() = 1+1;"; + + let mut highlighter = Highlighter::new(); + let mut config = HighlightConfiguration::new( + super::language(), + super::HIGHLIGHTS_QUERY, + super::INJECTIONS_QUERY, + super::LOCALS_QUERY, + ) + .unwrap(); + + config.configure(super::HIGHLIGHT_NAMES); + + use tree_sitter_highlight::HighlightEvent; + + let highlights = highlighter + .highlight(&config, code.as_bytes(), None, |_| None) + .unwrap(); + + for event in highlights { + if let Ok(event) = event { + match event { + HighlightEvent::Source { start, end } => { + eprint!("[{}]", &code[start..end]); + } + HighlightEvent::HighlightStart(i) => { + eprint!("<{}", i.0); + } + HighlightEvent::HighlightEnd => { + eprint!(">"); + } + } + } + } + } +} diff --git a/crates/tree-sitter-aqua/build/Makefile b/crates/tree-sitter-aqua/build/Makefile new file mode 100644 index 0000000..3190978 --- /dev/null +++ b/crates/tree-sitter-aqua/build/Makefile @@ -0,0 +1,342 @@ +# We borrow heavily from the kernel build setup, though we are simpler since +# we don't have Kconfig tweaking settings on us. + +# The implicit make rules have it looking for RCS files, among other things. +# We instead explicitly write all the rules we care about. +# It's even quicker (saves ~200ms) to pass -r on the command line. +MAKEFLAGS=-r + +# The source directory tree. +srcdir := .. +abs_srcdir := $(abspath $(srcdir)) + +# The name of the builddir. +builddir_name ?= . + +# The V=1 flag on command line makes us verbosely print command lines. +ifdef V + quiet= +else + quiet=quiet_ +endif + +# Specify BUILDTYPE=Release on the command line for a release build. +BUILDTYPE ?= Release + +# Directory all our build output goes into. +# Note that this must be two directories beneath src/ for unit tests to pass, +# as they reach into the src/ directory for data with relative paths. +builddir ?= $(builddir_name)/$(BUILDTYPE) +abs_builddir := $(abspath $(builddir)) +depsdir := $(builddir)/.deps + +# Object output directory. +obj := $(builddir)/obj +abs_obj := $(abspath $(obj)) + +# We build up a list of every single one of the targets so we can slurp in the +# generated dependency rule Makefiles in one pass. +all_deps := + + + +CC.target ?= $(CC) +CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS) +CXX.target ?= $(CXX) +CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS) +LINK.target ?= $(LINK) +LDFLAGS.target ?= $(LDFLAGS) +AR.target ?= $(AR) + +# C++ apps need to be linked with g++. +LINK ?= $(CXX.target) + +# TODO(evan): move all cross-compilation logic to gyp-time so we don't need +# to replicate this environment fallback in make as well. +CC.host ?= gcc +CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host) +CXX.host ?= g++ +CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host) +LINK.host ?= $(CXX.host) +LDFLAGS.host ?= $(LDFLAGS_host) +AR.host ?= ar + +# Define a dir function that can handle spaces. +# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions +# "leading spaces cannot appear in the text of the first argument as written. +# These characters can be put into the argument value by variable substitution." +empty := +space := $(empty) $(empty) + +# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces +replace_spaces = $(subst $(space),?,$1) +unreplace_spaces = $(subst ?,$(space),$1) +dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) + +# Flags to make gcc output dependency info. Note that you need to be +# careful here to use the flags that ccache and distcc can understand. +# We write to a dep file on the side first and then rename at the end +# so we can't end up with a broken dep file. +depfile = $(depsdir)/$(call replace_spaces,$@).d +DEPFLAGS = -MMD -MF $(depfile).raw + +# We have to fixup the deps output in a few ways. +# (1) the file output should mention the proper .o file. +# ccache or distcc lose the path to the target, so we convert a rule of +# the form: +# foobar.o: DEP1 DEP2 +# into +# path/to/foobar.o: DEP1 DEP2 +# (2) we want missing files not to cause us to fail to build. +# We want to rewrite +# foobar.o: DEP1 DEP2 \ +# DEP3 +# to +# DEP1: +# DEP2: +# DEP3: +# so if the files are missing, they're just considered phony rules. +# We have to do some pretty insane escaping to get those backslashes +# and dollar signs past make, the shell, and sed at the same time. +# Doesn't work with spaces, but that's fine: .d files have spaces in +# their names replaced with other characters. +define fixup_dep +# The depfile may not exist if the input file didn't have any #includes. +touch $(depfile).raw +# Fixup path as in (1). +sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) +# Add extra rules as in (2). +# We remove slashes and replace spaces with new lines; +# remove blank lines; +# delete the first line and append a colon to the remaining lines. +sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ + grep -v '^$$' |\ + sed -e 1d -e 's|$$|:|' \ + >> $(depfile) +rm $(depfile).raw +endef + +# Command definitions: +# - cmd_foo is the actual command to run; +# - quiet_cmd_foo is the brief-output summary of the command. + +quiet_cmd_cc = CC($(TOOLSET)) $@ +cmd_cc = $(CC.$(TOOLSET)) -o $@ $< $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c + +quiet_cmd_cxx = CXX($(TOOLSET)) $@ +cmd_cxx = $(CXX.$(TOOLSET)) -o $@ $< $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c + +quiet_cmd_objc = CXX($(TOOLSET)) $@ +cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< + +quiet_cmd_objcxx = CXX($(TOOLSET)) $@ +cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< + +# Commands for precompiled header files. +quiet_cmd_pch_c = CXX($(TOOLSET)) $@ +cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< +quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ +cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< +quiet_cmd_pch_m = CXX($(TOOLSET)) $@ +cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< +quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ +cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< + +# gyp-mac-tool is written next to the root Makefile by gyp. +# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd +# already. +quiet_cmd_mac_tool = MACTOOL $(4) $< +cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" + +quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ +cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) + +quiet_cmd_infoplist = INFOPLIST $@ +cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" + +quiet_cmd_touch = TOUCH $@ +cmd_touch = touch $@ + +quiet_cmd_copy = COPY $@ +# send stderr to /dev/null to ignore messages when linking directories. +cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@") + +quiet_cmd_alink = LIBTOOL-STATIC $@ +cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) + +quiet_cmd_link = LINK($(TOOLSET)) $@ +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) + +quiet_cmd_solink = SOLINK($(TOOLSET)) $@ +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) + +quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ +cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) + + +# Define an escape_quotes function to escape single quotes. +# This allows us to handle quotes properly as long as we always use +# use single quotes and escape_quotes. +escape_quotes = $(subst ','\'',$(1)) +# This comment is here just to include a ' to unconfuse syntax highlighting. +# Define an escape_vars function to escape '$' variable syntax. +# This allows us to read/write command lines with shell variables (e.g. +# $LD_LIBRARY_PATH), without triggering make substitution. +escape_vars = $(subst $$,$$$$,$(1)) +# Helper that expands to a shell command to echo a string exactly as it is in +# make. This uses printf instead of echo because printf's behaviour with respect +# to escape sequences is more portable than echo's across different shells +# (e.g., dash, bash). +exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' + +# Helper to compare the command we're about to run against the command +# we logged the last time we ran the command. Produces an empty +# string (false) when the commands match. +# Tricky point: Make has no string-equality test function. +# The kernel uses the following, but it seems like it would have false +# positives, where one string reordered its arguments. +# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ +# $(filter-out $(cmd_$@), $(cmd_$(1)))) +# We instead substitute each for the empty string into the other, and +# say they're equal if both substitutions produce the empty string. +# .d files contain ? instead of spaces, take that into account. +command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ + $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) + +# Helper that is non-empty when a prerequisite changes. +# Normally make does this implicitly, but we force rules to always run +# so we can check their command lines. +# $? -- new prerequisites +# $| -- order-only dependencies +prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) + +# Helper that executes all postbuilds until one fails. +define do_postbuilds + @E=0;\ + for p in $(POSTBUILDS); do\ + eval $$p;\ + E=$$?;\ + if [ $$E -ne 0 ]; then\ + break;\ + fi;\ + done;\ + if [ $$E -ne 0 ]; then\ + rm -rf "$@";\ + exit $$E;\ + fi +endef + +# do_cmd: run a command via the above cmd_foo names, if necessary. +# Should always run for a given target to handle command-line changes. +# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. +# Third argument, if non-zero, makes it do POSTBUILDS processing. +# Note: We intentionally do NOT call dirx for depfile, since it contains ? for +# spaces already and dirx strips the ? characters. +define do_cmd +$(if $(or $(command_changed),$(prereq_changed)), + @$(call exact_echo, $($(quiet)cmd_$(1))) + @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" + $(if $(findstring flock,$(word 2,$(cmd_$1))), + @$(cmd_$(1)) + @echo " $(quiet_cmd_$(1)): Finished", + @$(cmd_$(1)) + ) + @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) + @$(if $(2),$(fixup_dep)) + $(if $(and $(3), $(POSTBUILDS)), + $(call do_postbuilds) + ) +) +endef + +# Declare the "all" target first so it is the default, +# even though we don't have the deps yet. +.PHONY: all +all: + +# make looks for ways to re-generate included makefiles, but in our case, we +# don't have a direct way. Explicitly telling make that it has nothing to do +# for them makes it go faster. +%.d: ; + +# Use FORCE_DO_CMD to force a target to run. Should be coupled with +# do_cmd. +.PHONY: FORCE_DO_CMD +FORCE_DO_CMD: + +TOOLSET := target +# Suffix rules, putting all outputs into $(obj). +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) + +# Try building from generated source, too. +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) + +$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD + @$(call do_cmd,cxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD + @$(call do_cmd,objc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD + @$(call do_cmd,objcxx,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD + @$(call do_cmd,cc,1) +$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD + @$(call do_cmd,cc,1) + + +ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ + $(findstring $(join ^,$(prefix)),\ + $(join ^,tree_sitter_aqua_binding.target.mk)))),) + include tree_sitter_aqua_binding.target.mk +endif + +quiet_cmd_regen_makefile = ACTION Regenerating $@ +cmd_regen_makefile = cd $(srcdir); /opt/homebrew/Cellar/node@16/16.20.1_1/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/klasseg/Library/Caches/node-gyp/16.20.1" "-Dnode_gyp_dir=/opt/homebrew/Cellar/node@16/16.20.1_1/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=/Users/klasseg/Library/Caches/node-gyp/16.20.1/<(target_arch)/node.lib" "-Dmodule_root_dir=/Users/klasseg/Workspace/arc/arc-lang/crates/tree-sitter" "-Dnode_engine=v8" "--depth=." "-Goutput_dir=." "--generator-output=build" -I/Users/klasseg/Workspace/arc/arc-lang/crates/tree-sitter/build/config.gypi -I/opt/homebrew/Cellar/node@16/16.20.1_1/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/common.gypi "--toplevel-dir=." binding.gyp +Makefile: $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../Library/Caches/node-gyp/16.20.1/include/node/common.gypi $(srcdir)/../../../../../../../opt/homebrew/Cellar/node@16/16.20.1_1/lib/node_modules/npm/node_modules/node-gyp/addon.gypi + $(call do_cmd,regen_makefile) + +# "all" is a concatenation of the "all" targets from all the included +# sub-makefiles. This is just here to clarify. +all: + +# Add in dependency-tracking rules. $(all_deps) is the list of every single +# target in our tree. Only consider the ones with .d (dependency) info: +d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) +ifneq ($(d_files),) + include $(d_files) +endif diff --git a/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/bindings/node/binding.o.d b/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/bindings/node/binding.o.d new file mode 100644 index 0000000..5fd04e3 --- /dev/null +++ b/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/bindings/node/binding.o.d @@ -0,0 +1,65 @@ +cmd_Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o := c++ -o Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o ../bindings/node/binding.cc '-DNODE_GYP_MODULE_NAME=tree_sitter_aqua_binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/src -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/openssl/config -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/openssl/openssl/include -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/uv/include -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/zlib -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/v8/include -I../node_modules/nan -I../src -O3 -gdwarf-2 -mmacosx-version-min=10.13 -arch arm64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++14 -stdlib=libc++ -fno-rtti -fno-exceptions -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o.d.raw -I/opt/homebrew/opt/llvm/include -c +Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o: \ + ../bindings/node/binding.cc ../src/tree_sitter/parser.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/cppgc/common.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8config.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-internal.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-version.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-platform.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_version.h \ + ../node_modules/nan/nan.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/errno.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/version.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/unix.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/threadpool.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/darwin.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_buffer.h \ + /Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_object_wrap.h \ + ../node_modules/nan/nan_callbacks.h \ + ../node_modules/nan/nan_callbacks_12_inl.h \ + ../node_modules/nan/nan_maybe_43_inl.h \ + ../node_modules/nan/nan_converters.h \ + ../node_modules/nan/nan_converters_43_inl.h \ + ../node_modules/nan/nan_new.h \ + ../node_modules/nan/nan_implementation_12_inl.h \ + ../node_modules/nan/nan_persistent_12_inl.h \ + ../node_modules/nan/nan_weak.h ../node_modules/nan/nan_object_wrap.h \ + ../node_modules/nan/nan_private.h \ + ../node_modules/nan/nan_typedarray_contents.h \ + ../node_modules/nan/nan_json.h ../node_modules/nan/nan_scriptorigin.h +../bindings/node/binding.cc: +../src/tree_sitter/parser.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/cppgc/common.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8config.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-internal.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-version.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/v8-platform.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_version.h: +../node_modules/nan/nan.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/errno.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/version.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/unix.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/threadpool.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/uv/darwin.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_buffer.h: +/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node/node_object_wrap.h: +../node_modules/nan/nan_callbacks.h: +../node_modules/nan/nan_callbacks_12_inl.h: +../node_modules/nan/nan_maybe_43_inl.h: +../node_modules/nan/nan_converters.h: +../node_modules/nan/nan_converters_43_inl.h: +../node_modules/nan/nan_new.h: +../node_modules/nan/nan_implementation_12_inl.h: +../node_modules/nan/nan_persistent_12_inl.h: +../node_modules/nan/nan_weak.h: +../node_modules/nan/nan_object_wrap.h: +../node_modules/nan/nan_private.h: +../node_modules/nan/nan_typedarray_contents.h: +../node_modules/nan/nan_json.h: +../node_modules/nan/nan_scriptorigin.h: diff --git a/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/src/parser.o.d b/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/src/parser.o.d new file mode 100644 index 0000000..28851f7 --- /dev/null +++ b/crates/tree-sitter-aqua/build/Release/.deps/Release/obj.target/tree_sitter_arclang_binding/src/parser.o.d @@ -0,0 +1,5 @@ +cmd_Release/obj.target/tree_sitter_aqua_binding/src/parser.o := cc -o Release/obj.target/tree_sitter_aqua_binding/src/parser.o ../src/parser.c '-DNODE_GYP_MODULE_NAME=tree_sitter_aqua_binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/include/node -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/src -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/openssl/config -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/openssl/openssl/include -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/uv/include -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/zlib -I/Users/klasseg/Library/Caches/node-gyp/16.20.1/deps/v8/include -I../node_modules/nan -I../src -O3 -gdwarf-2 -mmacosx-version-min=10.13 -arch arm64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/tree_sitter_aqua_binding/src/parser.o.d.raw -I/opt/homebrew/opt/llvm/include -I/opt/homebrew/include -c +Release/obj.target/tree_sitter_aqua_binding/src/parser.o: \ + ../src/parser.c ../src/tree_sitter/parser.h +../src/parser.c: +../src/tree_sitter/parser.h: diff --git a/crates/tree-sitter-aqua/build/Release/.deps/Release/tree_sitter_arclang_binding.node.d b/crates/tree-sitter-aqua/build/Release/.deps/Release/tree_sitter_arclang_binding.node.d new file mode 100644 index 0000000..8121987 --- /dev/null +++ b/crates/tree-sitter-aqua/build/Release/.deps/Release/tree_sitter_arclang_binding.node.d @@ -0,0 +1 @@ +cmd_Release/tree_sitter_aqua_binding.node := c++ -bundle -undefined dynamic_lookup -Wl,-search_paths_first -mmacosx-version-min=10.13 -arch arm64 -L./Release -stdlib=libc++ -L/opt/homebrew/opt/llvm/lib -o Release/tree_sitter_aqua_binding.node Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o Release/obj.target/tree_sitter_aqua_binding/src/parser.o diff --git a/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o b/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o new file mode 100644 index 0000000..a711acb Binary files /dev/null and b/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/bindings/node/binding.o differ diff --git a/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/src/parser.o b/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/src/parser.o new file mode 100644 index 0000000..d9c46b0 Binary files /dev/null and b/crates/tree-sitter-aqua/build/Release/obj.target/tree_sitter_aqua_binding/src/parser.o differ diff --git a/crates/tree-sitter-aqua/build/Release/tree_sitter_aqua_binding.node b/crates/tree-sitter-aqua/build/Release/tree_sitter_aqua_binding.node new file mode 100755 index 0000000..5922975 Binary files /dev/null and b/crates/tree-sitter-aqua/build/Release/tree_sitter_aqua_binding.node differ diff --git a/crates/tree-sitter-aqua/build/binding.Makefile b/crates/tree-sitter-aqua/build/binding.Makefile new file mode 100644 index 0000000..78e666a --- /dev/null +++ b/crates/tree-sitter-aqua/build/binding.Makefile @@ -0,0 +1,6 @@ +# This file is generated by gyp; do not edit. + +export builddir_name ?= ./build/. +.PHONY: all +all: + $(MAKE) tree_sitter_aqua_binding diff --git a/crates/tree-sitter-aqua/build/config.gypi b/crates/tree-sitter-aqua/build/config.gypi new file mode 100644 index 0000000..bbaa72b --- /dev/null +++ b/crates/tree-sitter-aqua/build/config.gypi @@ -0,0 +1,388 @@ +# Do not edit. File was generated by node-gyp's "configure" step +{ + "target_defaults": { + "cflags": [], + "default_configuration": "Release", + "defines": [], + "include_dirs": [], + "libraries": [], + "msvs_configuration_platform": "ARM64", + "xcode_configuration_platform": "arm64" + }, + "variables": { + "asan": 0, + "coverage": "false", + "dcheck_always_on": 0, + "debug_nghttp2": "false", + "debug_node": "false", + "enable_lto": "false", + "enable_pgo_generate": "false", + "enable_pgo_use": "false", + "error_on_warn": "false", + "force_dynamic_crt": 0, + "host_arch": "arm64", + "icu_gyp_path": "tools/icu/icu-system.gyp", + "icu_small": "false", + "icu_ver_major": "73", + "is_debug": 0, + "libdir": "lib", + "llvm_version": "14.0", + "napi_build_version": "8", + "node_builtin_shareable_builtins": [ + "deps/cjs-module-lexer/lexer.js", + "deps/cjs-module-lexer/dist/lexer.js", + "deps/undici/undici.js" + ], + "node_byteorder": "little", + "node_debug_lib": "false", + "node_enable_d8": "false", + "node_install_corepack": "true", + "node_install_npm": "true", + "node_library_files": [ + "lib/_http_agent.js", + "lib/_http_client.js", + "lib/_http_common.js", + "lib/_http_incoming.js", + "lib/_http_outgoing.js", + "lib/_http_server.js", + "lib/_stream_duplex.js", + "lib/_stream_passthrough.js", + "lib/_stream_readable.js", + "lib/_stream_transform.js", + "lib/_stream_wrap.js", + "lib/_stream_writable.js", + "lib/_tls_common.js", + "lib/_tls_wrap.js", + "lib/assert.js", + "lib/assert/strict.js", + "lib/async_hooks.js", + "lib/buffer.js", + "lib/child_process.js", + "lib/cluster.js", + "lib/console.js", + "lib/constants.js", + "lib/crypto.js", + "lib/dgram.js", + "lib/diagnostics_channel.js", + "lib/dns.js", + "lib/dns/promises.js", + "lib/domain.js", + "lib/events.js", + "lib/fs.js", + "lib/fs/promises.js", + "lib/http.js", + "lib/http2.js", + "lib/https.js", + "lib/inspector.js", + "lib/internal/abort_controller.js", + "lib/internal/assert.js", + "lib/internal/assert/assertion_error.js", + "lib/internal/assert/calltracker.js", + "lib/internal/async_hooks.js", + "lib/internal/blob.js", + "lib/internal/blocklist.js", + "lib/internal/bootstrap/environment.js", + "lib/internal/bootstrap/loaders.js", + "lib/internal/bootstrap/node.js", + "lib/internal/bootstrap/pre_execution.js", + "lib/internal/bootstrap/switches/does_not_own_process_state.js", + "lib/internal/bootstrap/switches/does_own_process_state.js", + "lib/internal/bootstrap/switches/is_main_thread.js", + "lib/internal/bootstrap/switches/is_not_main_thread.js", + "lib/internal/buffer.js", + "lib/internal/child_process.js", + "lib/internal/child_process/serialization.js", + "lib/internal/cli_table.js", + "lib/internal/cluster/child.js", + "lib/internal/cluster/primary.js", + "lib/internal/cluster/round_robin_handle.js", + "lib/internal/cluster/shared_handle.js", + "lib/internal/cluster/utils.js", + "lib/internal/cluster/worker.js", + "lib/internal/console/constructor.js", + "lib/internal/console/global.js", + "lib/internal/constants.js", + "lib/internal/crypto/aes.js", + "lib/internal/crypto/certificate.js", + "lib/internal/crypto/cfrg.js", + "lib/internal/crypto/cipher.js", + "lib/internal/crypto/diffiehellman.js", + "lib/internal/crypto/ec.js", + "lib/internal/crypto/hash.js", + "lib/internal/crypto/hashnames.js", + "lib/internal/crypto/hkdf.js", + "lib/internal/crypto/keygen.js", + "lib/internal/crypto/keys.js", + "lib/internal/crypto/mac.js", + "lib/internal/crypto/pbkdf2.js", + "lib/internal/crypto/random.js", + "lib/internal/crypto/rsa.js", + "lib/internal/crypto/scrypt.js", + "lib/internal/crypto/sig.js", + "lib/internal/crypto/util.js", + "lib/internal/crypto/webcrypto.js", + "lib/internal/crypto/x509.js", + "lib/internal/debugger/inspect.js", + "lib/internal/debugger/inspect_client.js", + "lib/internal/debugger/inspect_repl.js", + "lib/internal/dgram.js", + "lib/internal/dns/promises.js", + "lib/internal/dns/utils.js", + "lib/internal/dtrace.js", + "lib/internal/encoding.js", + "lib/internal/error_serdes.js", + "lib/internal/errors.js", + "lib/internal/event_target.js", + "lib/internal/fixed_queue.js", + "lib/internal/freelist.js", + "lib/internal/freeze_intrinsics.js", + "lib/internal/fs/cp/cp-sync.js", + "lib/internal/fs/cp/cp.js", + "lib/internal/fs/dir.js", + "lib/internal/fs/promises.js", + "lib/internal/fs/read_file_context.js", + "lib/internal/fs/rimraf.js", + "lib/internal/fs/streams.js", + "lib/internal/fs/sync_write_stream.js", + "lib/internal/fs/utils.js", + "lib/internal/fs/watchers.js", + "lib/internal/heap_utils.js", + "lib/internal/histogram.js", + "lib/internal/http.js", + "lib/internal/http2/compat.js", + "lib/internal/http2/core.js", + "lib/internal/http2/util.js", + "lib/internal/idna.js", + "lib/internal/inspector_async_hook.js", + "lib/internal/js_stream_socket.js", + "lib/internal/legacy/processbinding.js", + "lib/internal/linkedlist.js", + "lib/internal/main/check_syntax.js", + "lib/internal/main/eval_stdin.js", + "lib/internal/main/eval_string.js", + "lib/internal/main/inspect.js", + "lib/internal/main/mksnapshot.js", + "lib/internal/main/print_help.js", + "lib/internal/main/prof_process.js", + "lib/internal/main/repl.js", + "lib/internal/main/run_main_module.js", + "lib/internal/main/test_runner.js", + "lib/internal/main/watch_mode.js", + "lib/internal/main/worker_thread.js", + "lib/internal/modules/cjs/helpers.js", + "lib/internal/modules/cjs/loader.js", + "lib/internal/modules/esm/assert.js", + "lib/internal/modules/esm/create_dynamic_module.js", + "lib/internal/modules/esm/fetch_module.js", + "lib/internal/modules/esm/formats.js", + "lib/internal/modules/esm/get_format.js", + "lib/internal/modules/esm/handle_process_exit.js", + "lib/internal/modules/esm/initialize_import_meta.js", + "lib/internal/modules/esm/load.js", + "lib/internal/modules/esm/loader.js", + "lib/internal/modules/esm/module_job.js", + "lib/internal/modules/esm/module_map.js", + "lib/internal/modules/esm/package_config.js", + "lib/internal/modules/esm/resolve.js", + "lib/internal/modules/esm/translators.js", + "lib/internal/modules/package_json_reader.js", + "lib/internal/modules/run_main.js", + "lib/internal/net.js", + "lib/internal/options.js", + "lib/internal/per_context/domexception.js", + "lib/internal/per_context/messageport.js", + "lib/internal/per_context/primordials.js", + "lib/internal/perf/event_loop_delay.js", + "lib/internal/perf/event_loop_utilization.js", + "lib/internal/perf/nodetiming.js", + "lib/internal/perf/observe.js", + "lib/internal/perf/performance.js", + "lib/internal/perf/performance_entry.js", + "lib/internal/perf/resource_timing.js", + "lib/internal/perf/timerify.js", + "lib/internal/perf/usertiming.js", + "lib/internal/perf/utils.js", + "lib/internal/policy/manifest.js", + "lib/internal/policy/sri.js", + "lib/internal/priority_queue.js", + "lib/internal/process/esm_loader.js", + "lib/internal/process/execution.js", + "lib/internal/process/per_thread.js", + "lib/internal/process/policy.js", + "lib/internal/process/promises.js", + "lib/internal/process/report.js", + "lib/internal/process/signal.js", + "lib/internal/process/task_queues.js", + "lib/internal/process/warning.js", + "lib/internal/process/worker_thread_only.js", + "lib/internal/promise_hooks.js", + "lib/internal/querystring.js", + "lib/internal/readline/callbacks.js", + "lib/internal/readline/emitKeypressEvents.js", + "lib/internal/readline/interface.js", + "lib/internal/readline/utils.js", + "lib/internal/repl.js", + "lib/internal/repl/await.js", + "lib/internal/repl/history.js", + "lib/internal/repl/utils.js", + "lib/internal/socket_list.js", + "lib/internal/socketaddress.js", + "lib/internal/source_map/prepare_stack_trace.js", + "lib/internal/source_map/source_map.js", + "lib/internal/source_map/source_map_cache.js", + "lib/internal/stream_base_commons.js", + "lib/internal/streams/add-abort-signal.js", + "lib/internal/streams/buffer_list.js", + "lib/internal/streams/compose.js", + "lib/internal/streams/destroy.js", + "lib/internal/streams/duplex.js", + "lib/internal/streams/duplexify.js", + "lib/internal/streams/end-of-stream.js", + "lib/internal/streams/from.js", + "lib/internal/streams/lazy_transform.js", + "lib/internal/streams/legacy.js", + "lib/internal/streams/operators.js", + "lib/internal/streams/passthrough.js", + "lib/internal/streams/pipeline.js", + "lib/internal/streams/readable.js", + "lib/internal/streams/state.js", + "lib/internal/streams/transform.js", + "lib/internal/streams/utils.js", + "lib/internal/streams/writable.js", + "lib/internal/test/binding.js", + "lib/internal/test/transfer.js", + "lib/internal/test_runner/harness.js", + "lib/internal/test_runner/runner.js", + "lib/internal/test_runner/tap_stream.js", + "lib/internal/test_runner/test.js", + "lib/internal/test_runner/utils.js", + "lib/internal/timers.js", + "lib/internal/tls/parse-cert-string.js", + "lib/internal/tls/secure-context.js", + "lib/internal/tls/secure-pair.js", + "lib/internal/trace_events_async_hooks.js", + "lib/internal/tty.js", + "lib/internal/url.js", + "lib/internal/util.js", + "lib/internal/util/colors.js", + "lib/internal/util/comparisons.js", + "lib/internal/util/debuglog.js", + "lib/internal/util/inspect.js", + "lib/internal/util/inspector.js", + "lib/internal/util/iterable_weak_map.js", + "lib/internal/util/parse_args/parse_args.js", + "lib/internal/util/parse_args/utils.js", + "lib/internal/util/types.js", + "lib/internal/v8/startup_snapshot.js", + "lib/internal/v8_prof_polyfill.js", + "lib/internal/v8_prof_processor.js", + "lib/internal/validators.js", + "lib/internal/vm/module.js", + "lib/internal/watch_mode/files_watcher.js", + "lib/internal/watchdog.js", + "lib/internal/webstreams/adapters.js", + "lib/internal/webstreams/compression.js", + "lib/internal/webstreams/encoding.js", + "lib/internal/webstreams/queuingstrategies.js", + "lib/internal/webstreams/readablestream.js", + "lib/internal/webstreams/transfer.js", + "lib/internal/webstreams/transformstream.js", + "lib/internal/webstreams/util.js", + "lib/internal/webstreams/writablestream.js", + "lib/internal/worker.js", + "lib/internal/worker/io.js", + "lib/internal/worker/js_transferable.js", + "lib/module.js", + "lib/net.js", + "lib/os.js", + "lib/path.js", + "lib/path/posix.js", + "lib/path/win32.js", + "lib/perf_hooks.js", + "lib/process.js", + "lib/punycode.js", + "lib/querystring.js", + "lib/readline.js", + "lib/repl.js", + "lib/stream.js", + "lib/stream/consumers.js", + "lib/stream/promises.js", + "lib/stream/web.js", + "lib/string_decoder.js", + "lib/sys.js", + "lib/test.js", + "lib/timers.js", + "lib/timers/promises.js", + "lib/tls.js", + "lib/trace_events.js", + "lib/tty.js", + "lib/url.js", + "lib/util.js", + "lib/util/types.js", + "lib/v8.js", + "lib/vm.js", + "lib/wasi.js", + "lib/worker_threads.js", + "lib/zlib.js" + ], + "node_module_version": 93, + "node_no_browser_globals": "false", + "node_prefix": "/opt/homebrew/Cellar/node@16/16.20.1_1", + "node_release_urlbase": "", + "node_shared": "false", + "node_shared_brotli": "true", + "node_shared_cares": "true", + "node_shared_http_parser": "false", + "node_shared_libuv": "true", + "node_shared_nghttp2": "true", + "node_shared_nghttp3": "false", + "node_shared_ngtcp2": "false", + "node_shared_openssl": "true", + "node_shared_zlib": "true", + "node_tag": "", + "node_target_type": "executable", + "node_use_bundled_v8": "true", + "node_use_dtrace": "true", + "node_use_etw": "false", + "node_use_node_code_cache": "true", + "node_use_node_snapshot": "true", + "node_use_openssl": "true", + "node_use_v8_platform": "true", + "node_with_ltcg": "false", + "node_without_node_options": "false", + "openssl_fips": "", + "openssl_is_fips": "false", + "openssl_quic": "false", + "ossfuzz": "false", + "shlib_suffix": "93.dylib", + "target_arch": "arm64", + "v8_enable_31bit_smis_on_64bit_arch": 0, + "v8_enable_gdbjit": 0, + "v8_enable_hugepage": 0, + "v8_enable_i18n_support": 1, + "v8_enable_inspector": 1, + "v8_enable_lite_mode": 0, + "v8_enable_object_print": 1, + "v8_enable_pointer_compression": 0, + "v8_enable_webassembly": 1, + "v8_no_strict_aliasing": 1, + "v8_optimized_debug": 1, + "v8_promise_internal_field_count": 1, + "v8_random_seed": 0, + "v8_trace_maps": 0, + "v8_use_siphash": 1, + "want_separate_host_toolset": 0, + "nodedir": "/Users/klasseg/Library/Caches/node-gyp/16.20.1", + "standalone_static_library": 1, + "metrics_registry": "https://registry.npmjs.org/", + "global_prefix": "/opt/homebrew", + "local_prefix": "/Users/klasseg/Workspace/arc/arc-lang/crates/tree-sitter", + "globalconfig": "/opt/homebrew/etc/npmrc", + "init_module": "/Users/klasseg/.npm-init.js", + "userconfig": "/Users/klasseg/.npmrc", + "node_gyp": "/opt/homebrew/Cellar/node@16/16.20.1_1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", + "cache": "/Users/klasseg/.npm", + "user_agent": "npm/8.19.4 node/v16.20.1 darwin arm64 workspaces/false", + "prefix": "/opt/homebrew" + } +} diff --git a/crates/tree-sitter-aqua/build/gyp-mac-tool b/crates/tree-sitter-aqua/build/gyp-mac-tool new file mode 100755 index 0000000..ffef860 --- /dev/null +++ b/crates/tree-sitter-aqua/build/gyp-mac-tool @@ -0,0 +1,772 @@ +#!/usr/bin/env python3 +# Generated by gyp. Do not edit. +# Copyright (c) 2012 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Utility functions to perform Xcode-style build steps. + +These functions are executed via gyp-mac-tool when using the Makefile generator. +""" + + +import fcntl +import fnmatch +import glob +import json +import os +import plistlib +import re +import shutil +import struct +import subprocess +import sys +import tempfile + + +def main(args): + executor = MacTool() + exit_code = executor.Dispatch(args) + if exit_code is not None: + sys.exit(exit_code) + + +class MacTool: + """This class performs all the Mac tooling steps. The methods can either be + executed directly, or dispatched from an argument list.""" + + def Dispatch(self, args): + """Dispatches a string command to a method.""" + if len(args) < 1: + raise Exception("Not enough arguments") + + method = "Exec%s" % self._CommandifyName(args[0]) + return getattr(self, method)(*args[1:]) + + def _CommandifyName(self, name_string): + """Transforms a tool name like copy-info-plist to CopyInfoPlist""" + return name_string.title().replace("-", "") + + def ExecCopyBundleResource(self, source, dest, convert_to_binary): + """Copies a resource file to the bundle/Resources directory, performing any + necessary compilation on each resource.""" + convert_to_binary = convert_to_binary == "True" + extension = os.path.splitext(source)[1].lower() + if os.path.isdir(source): + # Copy tree. + # TODO(thakis): This copies file attributes like mtime, while the + # single-file branch below doesn't. This should probably be changed to + # be consistent with the single-file branch. + if os.path.exists(dest): + shutil.rmtree(dest) + shutil.copytree(source, dest) + elif extension == ".xib": + return self._CopyXIBFile(source, dest) + elif extension == ".storyboard": + return self._CopyXIBFile(source, dest) + elif extension == ".strings" and not convert_to_binary: + self._CopyStringsFile(source, dest) + else: + if os.path.exists(dest): + os.unlink(dest) + shutil.copy(source, dest) + + if convert_to_binary and extension in (".plist", ".strings"): + self._ConvertToBinary(dest) + + def _CopyXIBFile(self, source, dest): + """Compiles a XIB file with ibtool into a binary plist in the bundle.""" + + # ibtool sometimes crashes with relative paths. See crbug.com/314728. + base = os.path.dirname(os.path.realpath(__file__)) + if os.path.relpath(source): + source = os.path.join(base, source) + if os.path.relpath(dest): + dest = os.path.join(base, dest) + + args = ["xcrun", "ibtool", "--errors", "--warnings", "--notices"] + + if os.environ["XCODE_VERSION_ACTUAL"] > "0700": + args.extend(["--auto-activate-custom-fonts"]) + if "IPHONEOS_DEPLOYMENT_TARGET" in os.environ: + args.extend( + [ + "--target-device", + "iphone", + "--target-device", + "ipad", + "--minimum-deployment-target", + os.environ["IPHONEOS_DEPLOYMENT_TARGET"], + ] + ) + else: + args.extend( + [ + "--target-device", + "mac", + "--minimum-deployment-target", + os.environ["MACOSX_DEPLOYMENT_TARGET"], + ] + ) + + args.extend( + ["--output-format", "human-readable-text", "--compile", dest, source] + ) + + ibtool_section_re = re.compile(r"/\*.*\*/") + ibtool_re = re.compile(r".*note:.*is clipping its content") + try: + stdout = subprocess.check_output(args) + except subprocess.CalledProcessError as e: + print(e.output) + raise + current_section_header = None + for line in stdout.splitlines(): + if ibtool_section_re.match(line): + current_section_header = line + elif not ibtool_re.match(line): + if current_section_header: + print(current_section_header) + current_section_header = None + print(line) + return 0 + + def _ConvertToBinary(self, dest): + subprocess.check_call( + ["xcrun", "plutil", "-convert", "binary1", "-o", dest, dest] + ) + + def _CopyStringsFile(self, source, dest): + """Copies a .strings file using iconv to reconvert the input into UTF-16.""" + input_code = self._DetectInputEncoding(source) or "UTF-8" + + # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call + # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints + # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing + # semicolon in dictionary. + # on invalid files. Do the same kind of validation. + import CoreFoundation + + with open(source, "rb") as in_file: + s = in_file.read() + d = CoreFoundation.CFDataCreate(None, s, len(s)) + _, error = CoreFoundation.CFPropertyListCreateFromXMLData(None, d, 0, None) + if error: + return + + with open(dest, "wb") as fp: + fp.write(s.decode(input_code).encode("UTF-16")) + + def _DetectInputEncoding(self, file_name): + """Reads the first few bytes from file_name and tries to guess the text + encoding. Returns None as a guess if it can't detect it.""" + with open(file_name, "rb") as fp: + try: + header = fp.read(3) + except Exception: + return None + if header.startswith(b"\xFE\xFF"): + return "UTF-16" + elif header.startswith(b"\xFF\xFE"): + return "UTF-16" + elif header.startswith(b"\xEF\xBB\xBF"): + return "UTF-8" + else: + return None + + def ExecCopyInfoPlist(self, source, dest, convert_to_binary, *keys): + """Copies the |source| Info.plist to the destination directory |dest|.""" + # Read the source Info.plist into memory. + with open(source) as fd: + lines = fd.read() + + # Insert synthesized key/value pairs (e.g. BuildMachineOSBuild). + plist = plistlib.readPlistFromString(lines) + if keys: + plist.update(json.loads(keys[0])) + lines = plistlib.writePlistToString(plist) + + # Go through all the environment variables and replace them as variables in + # the file. + IDENT_RE = re.compile(r"[_/\s]") + for key in os.environ: + if key.startswith("_"): + continue + evar = "${%s}" % key + evalue = os.environ[key] + lines = lines.replace(lines, evar, evalue) + + # Xcode supports various suffices on environment variables, which are + # all undocumented. :rfc1034identifier is used in the standard project + # template these days, and :identifier was used earlier. They are used to + # convert non-url characters into things that look like valid urls -- + # except that the replacement character for :identifier, '_' isn't valid + # in a URL either -- oops, hence :rfc1034identifier was born. + evar = "${%s:identifier}" % key + evalue = IDENT_RE.sub("_", os.environ[key]) + lines = lines.replace(lines, evar, evalue) + + evar = "${%s:rfc1034identifier}" % key + evalue = IDENT_RE.sub("-", os.environ[key]) + lines = lines.replace(lines, evar, evalue) + + # Remove any keys with values that haven't been replaced. + lines = lines.splitlines() + for i in range(len(lines)): + if lines[i].strip().startswith("${"): + lines[i] = None + lines[i - 1] = None + lines = "\n".join(line for line in lines if line is not None) + + # Write out the file with variables replaced. + with open(dest, "w") as fd: + fd.write(lines) + + # Now write out PkgInfo file now that the Info.plist file has been + # "compiled". + self._WritePkgInfo(dest) + + if convert_to_binary == "True": + self._ConvertToBinary(dest) + + def _WritePkgInfo(self, info_plist): + """This writes the PkgInfo file from the data stored in Info.plist.""" + plist = plistlib.readPlist(info_plist) + if not plist: + return + + # Only create PkgInfo for executable types. + package_type = plist["CFBundlePackageType"] + if package_type != "APPL": + return + + # The format of PkgInfo is eight characters, representing the bundle type + # and bundle signature, each four characters. If that is missing, four + # '?' characters are used instead. + signature_code = plist.get("CFBundleSignature", "????") + if len(signature_code) != 4: # Wrong length resets everything, too. + signature_code = "?" * 4 + + dest = os.path.join(os.path.dirname(info_plist), "PkgInfo") + with open(dest, "w") as fp: + fp.write(f"{package_type}{signature_code}") + + def ExecFlock(self, lockfile, *cmd_list): + """Emulates the most basic behavior of Linux's flock(1).""" + # Rely on exception handling to report errors. + fd = os.open(lockfile, os.O_RDONLY | os.O_NOCTTY | os.O_CREAT, 0o666) + fcntl.flock(fd, fcntl.LOCK_EX) + return subprocess.call(cmd_list) + + def ExecFilterLibtool(self, *cmd_list): + """Calls libtool and filters out '/path/to/libtool: file: foo.o has no + symbols'.""" + libtool_re = re.compile( + r"^.*libtool: (?:for architecture: \S* )?" r"file: .* has no symbols$" + ) + libtool_re5 = re.compile( + r"^.*libtool: warning for library: " + + r".* the table of contents is empty " + + r"\(no object file members in the library define global symbols\)$" + ) + env = os.environ.copy() + # Ref: + # http://www.opensource.apple.com/source/cctools/cctools-809/misc/libtool.c + # The problem with this flag is that it resets the file mtime on the file to + # epoch=0, e.g. 1970-1-1 or 1969-12-31 depending on timezone. + env["ZERO_AR_DATE"] = "1" + libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env) + err = libtoolout.communicate()[1].decode("utf-8") + for line in err.splitlines(): + if not libtool_re.match(line) and not libtool_re5.match(line): + print(line, file=sys.stderr) + # Unconditionally touch the output .a file on the command line if present + # and the command succeeded. A bit hacky. + if not libtoolout.returncode: + for i in range(len(cmd_list) - 1): + if cmd_list[i] == "-o" and cmd_list[i + 1].endswith(".a"): + os.utime(cmd_list[i + 1], None) + break + return libtoolout.returncode + + def ExecPackageIosFramework(self, framework): + # Find the name of the binary based on the part before the ".framework". + binary = os.path.basename(framework).split(".")[0] + module_path = os.path.join(framework, "Modules") + if not os.path.exists(module_path): + os.mkdir(module_path) + module_template = ( + "framework module %s {\n" + ' umbrella header "%s.h"\n' + "\n" + " export *\n" + " module * { export * }\n" + "}\n" % (binary, binary) + ) + + with open(os.path.join(module_path, "module.modulemap"), "w") as module_file: + module_file.write(module_template) + + def ExecPackageFramework(self, framework, version): + """Takes a path to Something.framework and the Current version of that and + sets up all the symlinks.""" + # Find the name of the binary based on the part before the ".framework". + binary = os.path.basename(framework).split(".")[0] + + CURRENT = "Current" + RESOURCES = "Resources" + VERSIONS = "Versions" + + if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): + # Binary-less frameworks don't seem to contain symlinks (see e.g. + # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). + return + + # Move into the framework directory to set the symlinks correctly. + pwd = os.getcwd() + os.chdir(framework) + + # Set up the Current version. + self._Relink(version, os.path.join(VERSIONS, CURRENT)) + + # Set up the root symlinks. + self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) + self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) + + # Back to where we were before! + os.chdir(pwd) + + def _Relink(self, dest, link): + """Creates a symlink to |dest| named |link|. If |link| already exists, + it is overwritten.""" + if os.path.lexists(link): + os.remove(link) + os.symlink(dest, link) + + def ExecCompileIosFrameworkHeaderMap(self, out, framework, *all_headers): + framework_name = os.path.basename(framework).split(".")[0] + all_headers = [os.path.abspath(header) for header in all_headers] + filelist = {} + for header in all_headers: + filename = os.path.basename(header) + filelist[filename] = header + filelist[os.path.join(framework_name, filename)] = header + WriteHmap(out, filelist) + + def ExecCopyIosFrameworkHeaders(self, framework, *copy_headers): + header_path = os.path.join(framework, "Headers") + if not os.path.exists(header_path): + os.makedirs(header_path) + for header in copy_headers: + shutil.copy(header, os.path.join(header_path, os.path.basename(header))) + + def ExecCompileXcassets(self, keys, *inputs): + """Compiles multiple .xcassets files into a single .car file. + + This invokes 'actool' to compile all the inputs .xcassets files. The + |keys| arguments is a json-encoded dictionary of extra arguments to + pass to 'actool' when the asset catalogs contains an application icon + or a launch image. + + Note that 'actool' does not create the Assets.car file if the asset + catalogs does not contains imageset. + """ + command_line = [ + "xcrun", + "actool", + "--output-format", + "human-readable-text", + "--compress-pngs", + "--notices", + "--warnings", + "--errors", + ] + is_iphone_target = "IPHONEOS_DEPLOYMENT_TARGET" in os.environ + if is_iphone_target: + platform = os.environ["CONFIGURATION"].split("-")[-1] + if platform not in ("iphoneos", "iphonesimulator"): + platform = "iphonesimulator" + command_line.extend( + [ + "--platform", + platform, + "--target-device", + "iphone", + "--target-device", + "ipad", + "--minimum-deployment-target", + os.environ["IPHONEOS_DEPLOYMENT_TARGET"], + "--compile", + os.path.abspath(os.environ["CONTENTS_FOLDER_PATH"]), + ] + ) + else: + command_line.extend( + [ + "--platform", + "macosx", + "--target-device", + "mac", + "--minimum-deployment-target", + os.environ["MACOSX_DEPLOYMENT_TARGET"], + "--compile", + os.path.abspath(os.environ["UNLOCALIZED_RESOURCES_FOLDER_PATH"]), + ] + ) + if keys: + keys = json.loads(keys) + for key, value in keys.items(): + arg_name = "--" + key + if isinstance(value, bool): + if value: + command_line.append(arg_name) + elif isinstance(value, list): + for v in value: + command_line.append(arg_name) + command_line.append(str(v)) + else: + command_line.append(arg_name) + command_line.append(str(value)) + # Note: actool crashes if inputs path are relative, so use os.path.abspath + # to get absolute path name for inputs. + command_line.extend(map(os.path.abspath, inputs)) + subprocess.check_call(command_line) + + def ExecMergeInfoPlist(self, output, *inputs): + """Merge multiple .plist files into a single .plist file.""" + merged_plist = {} + for path in inputs: + plist = self._LoadPlistMaybeBinary(path) + self._MergePlist(merged_plist, plist) + plistlib.writePlist(merged_plist, output) + + def ExecCodeSignBundle(self, key, entitlements, provisioning, path, preserve): + """Code sign a bundle. + + This function tries to code sign an iOS bundle, following the same + algorithm as Xcode: + 1. pick the provisioning profile that best match the bundle identifier, + and copy it into the bundle as embedded.mobileprovision, + 2. copy Entitlements.plist from user or SDK next to the bundle, + 3. code sign the bundle. + """ + substitutions, overrides = self._InstallProvisioningProfile( + provisioning, self._GetCFBundleIdentifier() + ) + entitlements_path = self._InstallEntitlements( + entitlements, substitutions, overrides + ) + + args = ["codesign", "--force", "--sign", key] + if preserve == "True": + args.extend(["--deep", "--preserve-metadata=identifier,entitlements"]) + else: + args.extend(["--entitlements", entitlements_path]) + args.extend(["--timestamp=none", path]) + subprocess.check_call(args) + + def _InstallProvisioningProfile(self, profile, bundle_identifier): + """Installs embedded.mobileprovision into the bundle. + + Args: + profile: string, optional, short name of the .mobileprovision file + to use, if empty or the file is missing, the best file installed + will be used + bundle_identifier: string, value of CFBundleIdentifier from Info.plist + + Returns: + A tuple containing two dictionary: variables substitutions and values + to overrides when generating the entitlements file. + """ + source_path, provisioning_data, team_id = self._FindProvisioningProfile( + profile, bundle_identifier + ) + target_path = os.path.join( + os.environ["BUILT_PRODUCTS_DIR"], + os.environ["CONTENTS_FOLDER_PATH"], + "embedded.mobileprovision", + ) + shutil.copy2(source_path, target_path) + substitutions = self._GetSubstitutions(bundle_identifier, team_id + ".") + return substitutions, provisioning_data["Entitlements"] + + def _FindProvisioningProfile(self, profile, bundle_identifier): + """Finds the .mobileprovision file to use for signing the bundle. + + Checks all the installed provisioning profiles (or if the user specified + the PROVISIONING_PROFILE variable, only consult it) and select the most + specific that correspond to the bundle identifier. + + Args: + profile: string, optional, short name of the .mobileprovision file + to use, if empty or the file is missing, the best file installed + will be used + bundle_identifier: string, value of CFBundleIdentifier from Info.plist + + Returns: + A tuple of the path to the selected provisioning profile, the data of + the embedded plist in the provisioning profile and the team identifier + to use for code signing. + + Raises: + SystemExit: if no .mobileprovision can be used to sign the bundle. + """ + profiles_dir = os.path.join( + os.environ["HOME"], "Library", "MobileDevice", "Provisioning Profiles" + ) + if not os.path.isdir(profiles_dir): + print( + "cannot find mobile provisioning for %s" % (bundle_identifier), + file=sys.stderr, + ) + sys.exit(1) + provisioning_profiles = None + if profile: + profile_path = os.path.join(profiles_dir, profile + ".mobileprovision") + if os.path.exists(profile_path): + provisioning_profiles = [profile_path] + if not provisioning_profiles: + provisioning_profiles = glob.glob( + os.path.join(profiles_dir, "*.mobileprovision") + ) + valid_provisioning_profiles = {} + for profile_path in provisioning_profiles: + profile_data = self._LoadProvisioningProfile(profile_path) + app_id_pattern = profile_data.get("Entitlements", {}).get( + "application-identifier", "" + ) + for team_identifier in profile_data.get("TeamIdentifier", []): + app_id = f"{team_identifier}.{bundle_identifier}" + if fnmatch.fnmatch(app_id, app_id_pattern): + valid_provisioning_profiles[app_id_pattern] = ( + profile_path, + profile_data, + team_identifier, + ) + if not valid_provisioning_profiles: + print( + "cannot find mobile provisioning for %s" % (bundle_identifier), + file=sys.stderr, + ) + sys.exit(1) + # If the user has multiple provisioning profiles installed that can be + # used for ${bundle_identifier}, pick the most specific one (ie. the + # provisioning profile whose pattern is the longest). + selected_key = max(valid_provisioning_profiles, key=lambda v: len(v)) + return valid_provisioning_profiles[selected_key] + + def _LoadProvisioningProfile(self, profile_path): + """Extracts the plist embedded in a provisioning profile. + + Args: + profile_path: string, path to the .mobileprovision file + + Returns: + Content of the plist embedded in the provisioning profile as a dictionary. + """ + with tempfile.NamedTemporaryFile() as temp: + subprocess.check_call( + ["security", "cms", "-D", "-i", profile_path, "-o", temp.name] + ) + return self._LoadPlistMaybeBinary(temp.name) + + def _MergePlist(self, merged_plist, plist): + """Merge |plist| into |merged_plist|.""" + for key, value in plist.items(): + if isinstance(value, dict): + merged_value = merged_plist.get(key, {}) + if isinstance(merged_value, dict): + self._MergePlist(merged_value, value) + merged_plist[key] = merged_value + else: + merged_plist[key] = value + else: + merged_plist[key] = value + + def _LoadPlistMaybeBinary(self, plist_path): + """Loads into a memory a plist possibly encoded in binary format. + + This is a wrapper around plistlib.readPlist that tries to convert the + plist to the XML format if it can't be parsed (assuming that it is in + the binary format). + + Args: + plist_path: string, path to a plist file, in XML or binary format + + Returns: + Content of the plist as a dictionary. + """ + try: + # First, try to read the file using plistlib that only supports XML, + # and if an exception is raised, convert a temporary copy to XML and + # load that copy. + return plistlib.readPlist(plist_path) + except Exception: + pass + with tempfile.NamedTemporaryFile() as temp: + shutil.copy2(plist_path, temp.name) + subprocess.check_call(["plutil", "-convert", "xml1", temp.name]) + return plistlib.readPlist(temp.name) + + def _GetSubstitutions(self, bundle_identifier, app_identifier_prefix): + """Constructs a dictionary of variable substitutions for Entitlements.plist. + + Args: + bundle_identifier: string, value of CFBundleIdentifier from Info.plist + app_identifier_prefix: string, value for AppIdentifierPrefix + + Returns: + Dictionary of substitutions to apply when generating Entitlements.plist. + """ + return { + "CFBundleIdentifier": bundle_identifier, + "AppIdentifierPrefix": app_identifier_prefix, + } + + def _GetCFBundleIdentifier(self): + """Extracts CFBundleIdentifier value from Info.plist in the bundle. + + Returns: + Value of CFBundleIdentifier in the Info.plist located in the bundle. + """ + info_plist_path = os.path.join( + os.environ["TARGET_BUILD_DIR"], os.environ["INFOPLIST_PATH"] + ) + info_plist_data = self._LoadPlistMaybeBinary(info_plist_path) + return info_plist_data["CFBundleIdentifier"] + + def _InstallEntitlements(self, entitlements, substitutions, overrides): + """Generates and install the ${BundleName}.xcent entitlements file. + + Expands variables "$(variable)" pattern in the source entitlements file, + add extra entitlements defined in the .mobileprovision file and the copy + the generated plist to "${BundlePath}.xcent". + + Args: + entitlements: string, optional, path to the Entitlements.plist template + to use, defaults to "${SDKROOT}/Entitlements.plist" + substitutions: dictionary, variable substitutions + overrides: dictionary, values to add to the entitlements + + Returns: + Path to the generated entitlements file. + """ + source_path = entitlements + target_path = os.path.join( + os.environ["BUILT_PRODUCTS_DIR"], os.environ["PRODUCT_NAME"] + ".xcent" + ) + if not source_path: + source_path = os.path.join(os.environ["SDKROOT"], "Entitlements.plist") + shutil.copy2(source_path, target_path) + data = self._LoadPlistMaybeBinary(target_path) + data = self._ExpandVariables(data, substitutions) + if overrides: + for key in overrides: + if key not in data: + data[key] = overrides[key] + plistlib.writePlist(data, target_path) + return target_path + + def _ExpandVariables(self, data, substitutions): + """Expands variables "$(variable)" in data. + + Args: + data: object, can be either string, list or dictionary + substitutions: dictionary, variable substitutions to perform + + Returns: + Copy of data where each references to "$(variable)" has been replaced + by the corresponding value found in substitutions, or left intact if + the key was not found. + """ + if isinstance(data, str): + for key, value in substitutions.items(): + data = data.replace("$(%s)" % key, value) + return data + if isinstance(data, list): + return [self._ExpandVariables(v, substitutions) for v in data] + if isinstance(data, dict): + return {k: self._ExpandVariables(data[k], substitutions) for k in data} + return data + + +def NextGreaterPowerOf2(x): + return 2 ** (x).bit_length() + + +def WriteHmap(output_name, filelist): + """Generates a header map based on |filelist|. + + Per Mark Mentovai: + A header map is structured essentially as a hash table, keyed by names used + in #includes, and providing pathnames to the actual files. + + The implementation below and the comment above comes from inspecting: + http://www.opensource.apple.com/source/distcc/distcc-2503/distcc_dist/include_server/headermap.py?txt + while also looking at the implementation in clang in: + https://llvm.org/svn/llvm-project/cfe/trunk/lib/Lex/HeaderMap.cpp + """ + magic = 1751998832 + version = 1 + _reserved = 0 + count = len(filelist) + capacity = NextGreaterPowerOf2(count) + strings_offset = 24 + (12 * capacity) + max_value_length = max(len(value) for value in filelist.values()) + + out = open(output_name, "wb") + out.write( + struct.pack( + " [ + $._whitespace, + $.line_comment, + // $.block_comment + ], + + externals: $ => [], + + word: $ => $.name, + + rules: { + program: $ => optional($._stmts), + _whitespace: $ => /[ \t\r\n]/, + line_comment: $ => token(seq('#', /.*/)), + name: $ => /[a-zA-Z_][a-zA-Z0-9_]*/, + index: $ => /[0-9]+/, + meta: $ => seq('@', '{', optional($._attributes), '}'), + _attributes: $ => seq($.attribute, repeat(seq(',', $.attribute)), optional(',')), + attribute: $ => seq($.name, optional(seq(':', $._constant))), + _constant: $ => choice( + $.constant_int, + $.constant_float, + $.constant_string, + $.constant_char, + $.constant_bool, + $.constant_unit, + ), + constant_int: $ => token.immediate(seq( + /-?[0-9]+/, + optional(/[a-zA-Z_][a-zA-Z0-9_]*/) + )), + constant_float: $ => /-?[0-9]+\.[0-9]+/, + constant_string: $ => seq( + $.string_quote, + repeat(choice( + $.string_interpolation, + $.string_content + )), + $.string_quote, + ), + string_quote: $ => '"', + string_content: $ => /[^$"]+/, + string_interpolation: $ => seq('$', choice($.block, $.name)), + constant_char: $ => seq("'", /[^']*/, "'"), + constant_bool: $ => choice('true', 'false'), + constant_unit: $ => seq('(', ')'), + _stmts: $ => repeat1($._stmt), + _stmt: $ => choice( + $.stmt_def, + $.stmt_type, + $.stmt_enum, + $.stmt_struct, + $.stmt_val, + $.stmt_var, + $.stmt_expr, + $.stmt_code, + $.stmt_mod, + $.stmt_use, + $._stmt_noop + ), + stmt_def: $ => seq( + optional($.meta), + 'def', + field('name', $.name), + field('inner', seq( + optional(seq('[', optional($._generics), ']')), + '(', optional($._params), ')', + seq(':', $._type), + choice( + seq('=', $._expr, ';'), + $.block + ) + )) + ), + stmt_type: $ => seq( + optional($.meta), + 'type', + field('name', $.name), + field('inner', seq( + optional(seq('[', optional($._generics), ']')), + '=', + $._type, + ';' + )) + ), + stmt_enum: $ => seq( + optional($.meta), + 'enum', + field('name', $.name), + field('inner', seq( + optional(seq('[', optional($._generics), ']')), + '{', optional(seq($.variant, repeat(seq(',', $.variant)), optional(','))), '}' + )) + ), + variant: $ => seq( + $.name, + optional( + choice( + seq('(', optional($._types), ')'), + seq('{', optional($._type_fields), '}'), + ) + ) + ), + stmt_struct: $ => seq( + optional($.meta), + 'struct', + field('name', $.name), + field('inner', seq( + optional(seq('[', optional($._generics), ']')), + choice( + seq('(', optional($._types), ')'), + seq('{', optional($._type_fields), '}'), + ) + )) + ), + stmt_val: $ => prec(1, seq('val', $._pattern, '=', $._expr, ';')), + stmt_var: $ => seq('var', $._pattern, '=', $._expr, ';'), + stmt_expr: $ => seq($._expr, ';'), + stmt_code: $ => prec(10, seq( + '---', + field('lang', choice('rust', 'python')), + optional(field('code', $.code)), + '---' + )), + stmt_mod: $ => seq('mod', $.name, '{', optional($._stmts), '}'), + stmt_use: $ => seq('use', $.name, ';'), + code: $ => repeat1(/[^-]+|-[^-]/), + _stmt_noop: $ => ';', + _types: $ => seq($._type, repeat(seq(',', $._type)), optional(',')), + _type: $ => choice( + $.type_fun, + $.type_record_concat, + $.type_paren, + $.type_nominal, + $.type_tuple, + $.type_record, + $.type_array, + $.type_unit, + $.type_never, + $.type_wild, + ), + type_fun: $ => prec(1, seq('fun', '(', optional($._types), ')', ':', $._type)), + type_record_concat: $ => prec.left(2, seq($._type, '&', $._type)), + type_paren: $ => seq('(', $._type, ')'), + type_nominal: $ => prec.left(3, seq($.type_name, optional(seq('[', optional($._types), ']')))), + type_name: $ => $.name, + type_tuple: $ => seq('(', $._type, ',', optional($._types), ')'), + type_record: $ => seq('{', $._type_fields, '}'), + type_array: $ => seq('[', optional($._types), ']'), + type_unit: $ => seq('(', ')'), + type_never: $ => '!', + type_wild: $ => '_', + _type_fields: $ => seq($.type_field, repeat(seq(',', $.type_field)), optional(',')), + type_field: $ => seq($.name, seq(':', $._type)), + generic: $ => $.name, + _generics: $ => seq($.generic, repeat(seq(',', $.generic)), optional(',')), + _params: $ => seq($._param, repeat(seq(',', $._param)), optional(',')), + _param: $ => prec(10, seq($._pattern, ':', $._type)), + _patterns: $ => seq($._pattern, repeat(seq(',', $._pattern)), optional(',')), + _pattern_fields: $ => seq($.pattern_field, repeat(seq(',', $.pattern_field)), optional(',')), + pattern_field: $ => seq($.name, optional(seq(':', $._pattern))), + _pattern: $ => choice( + $.pattern_annot, + $.pattern_or, + $.pattern_record_concat, + $.pattern_paren, + $.pattern_constant, + $.pattern_name, + $.pattern_variant, + $.pattern_tuple, + $.pattern_record, + $.pattern_array, + $.pattern_wild, + ), + pattern_annot: $ => prec(1, seq($._pattern, ':', $._type)), + pattern_or: $ => prec.left(2, seq($._pattern, 'or', $._pattern)), + pattern_record_concat: $ => prec.left(2, seq($._pattern, '&', $._pattern)), + pattern_paren: $ => seq('(', $._pattern, ')'), + pattern_constant: $ => $._constant, + pattern_name: $ => $.name, + pattern_variant: $ => choice( + seq($.variant_name, '(', optional($._patterns), ')'), + seq($.variant_name, '{', optional($._pattern_fields), '}') + ), + pattern_tuple: $ => seq('(', $._pattern, ',', optional($._patterns), ')'), + pattern_record: $ => seq('{', optional($._pattern_fields), '}'), + pattern_array: $ => seq('[', optional($._patterns), ']'), + pattern_wild: $ => '_', + + variant_name: $ => $.name, + + _exprs: $ => seq($._expr, repeat(seq(',', $._expr)), optional(',')), + _expr: $ => choice( + $.expr_return, + $.expr_break, + $.expr_continue, + $.expr_throw, + $.expr_query, + $.expr_fun, + $.expr_binary, + $.expr_annot, + $.expr_call, + $.expr_tuple_access, + $.expr_record_access, + $.expr_array_access, + $.expr_method_call, + $.expr_paren, + $.expr_constant, + $.expr_name, + $.expr_array, + $.expr_tuple, + $.expr_record, + $.expr_do, + $.expr_if, + $.expr_match, + $.expr_loop, + $.expr_while, + $.expr_for, + $.expr_try, + $.expr_record_variant, + // $._expr_inject, + ), + expr_return: $ => prec.left(1, seq('return', optional($._expr))), + expr_break: $ => prec.left(1, seq('break', optional($._expr))), + expr_continue: $ => prec.left(1, 'continue'), + expr_throw: $ => prec.left(1, seq('throw', $._expr)), + expr_query: $ => prec.left(2, seq($.query_from, optional($._query_stmts))), + _rust: $ => seq('{', repeat(choice(/[^{}]+/, $._rust)), '}'), + _query_stmts: $ => repeat1($._query_stmt), + _query_stmt: $ => choice( + $.query_from, + $.query_where, + $.query_join, + $.query_union, + $.query_group, + $.query_over, + $.query_select, + $.query_roll, + $.query_compute, + $.query_select, + $.query_into, + $.query_order, + $.query_val, + ), + + query_from: $ => seq('from', $._pattern, 'in', $._expr), + query_where: $ => seq('where', $._expr), + query_join: $ => seq('join', $._pattern, 'in', $._expr, 'on', $._expr), + query_union: $ => seq('union', $._expr), + query_group: $ => prec.left(2, seq('group', $._expr, optional($._as), '{', optional($._query_stmts), '}', optional($._as))), + query_over: $ => prec.left(2, seq('over', $._expr, '{', optional($._query_stmts), '}', optional($._as))), + query_roll: $ => prec.left(2, seq('roll', $._expr, optional($._of), optional($._as))), + query_compute: $ => prec.left(2, seq('compute', $._expr, optional($._of), optional($._as))), + query_select: $ => prec.left(2, seq('select', $._expr, optional($._as))), + query_val: $ => prec.left(2, seq('with', $._pattern, '=', $._expr)), + query_into: $ => seq('into', $._expr), + query_order: $ => prec.left(2, seq('order', $._expr, optional('desc'))), + + _as: $ => seq('as', $.name), + _of: $ => seq('of', $._expr), + + expr_fun: $ => prec.left(2, seq( + 'fun', + '(', $._patterns, ')', + optional(seq(':', $._type)), + choice( + seq('=', $._expr), + $.block + ) + )), + expr_binary: $ => choice( + prec.left(1, seq($._expr, choice('=', '+=', '-=', '*=', '/='), $._expr)), + prec.left(2, seq($._expr, choice('..', '..='), $._expr)), + prec.left(3, seq($._expr, choice('and', 'or'), $._expr)), + prec.left(4, seq($._expr, choice('==', '!='), $._expr)), + prec.left(5, seq($._expr, choice('<', '>', '<=', '>='), $._expr)), + prec.left(6, seq($._expr, choice('+', '-'), $._expr)), + prec.left(7, seq($._expr, choice('*', '/'), $._expr)), + ), + expr_unary: $ => prec(8, seq(choice('not', '-', '+'), $._expr)), + expr_annot: $ => prec(9, seq($._expr, ':', $._type)), + expr_call: $ => prec(10, seq( + field('function', $._expr), + optional(seq('::', '[', $._types, ']')), + '(', optional($._exprs), ')') + ), + expr_tuple_access: $ => prec(11, seq($._expr, '.', $.index)), + expr_record_access: $ => prec(11, seq($._expr, '.', $.name)), + expr_array_access: $ => prec(11, seq($._expr, '[', $._expr, ']')), + expr_method_call: $ => prec(12, seq( + $._expr, + '.', + field('name', $.name), + optional(seq('::', '[', $._types, ']')), + '(', optional($._exprs), ')' + )), + expr_record_variant: $ => prec(13, seq($.name, '{', optional($._expr_fields), '}')), + expr_paren: $ => seq('(', $._expr, ')'), + expr_constant: $ => $._constant, + expr_name: $ => prec(14, $.name), + expr_array: $ => seq('[', optional($._exprs), ']'), + expr_tuple: $ => seq('(', $._expr, ',', optional($._exprs), ')'), + expr_record: $ => seq('{', optional($._expr_fields), '}'), + _expr_fields: $ => seq($.expr_field, repeat(seq(',', $.expr_field)), optional(',')), + expr_field: $ => choice( + $.expr_field_expr, + $.expr_field_name, + ), + expr_field_expr: $ => prec(15, seq($.name, optional(seq(':', $._expr)))), + expr_field_name: $ => prec(2, seq($._expr, '.', $.name)), + expr_do: $ => seq('do', $.block), + expr_if: $ => seq('if', $._expr, $.block, optional(seq('else', $.block))), + expr_match: $ => seq('match', $._expr, '{', $._arms, '}'), + expr_loop: $ => seq('loop', $.block), + expr_while: $ => seq('while', $._expr, $.block), + expr_for: $ => seq('for', $._pattern, 'in', $._expr, $.block), + expr_try: $ => seq('try', $.block, 'catch', '{', optional($._arms), '}', 'finally', $.block), + block: $ => seq('{', optional($._stmts), optional($._expr), '}'), + _arms: $ => seq($.arm, repeat(seq(',', $.arm)), optional(',')), + arm: $ => field('arm', seq($._pattern, '=>', $._expr)), + } +}); diff --git a/crates/tree-sitter-aqua/package-lock.json b/crates/tree-sitter-aqua/package-lock.json new file mode 100644 index 0000000..05ad10f --- /dev/null +++ b/crates/tree-sitter-aqua/package-lock.json @@ -0,0 +1,47 @@ +{ + "name": "tree-sitter-aqua", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "tree-sitter-aqua", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "nan": "^2.17.0" + }, + "devDependencies": { + "tree-sitter-cli": "^0.20.8" + } + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + }, + "node_modules/tree-sitter-cli": { + "version": "0.20.8", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.8.tgz", + "integrity": "sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "tree-sitter": "cli.js" + } + } + }, + "dependencies": { + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + }, + "tree-sitter-cli": { + "version": "0.20.8", + "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.8.tgz", + "integrity": "sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==", + "dev": true + } + } +} diff --git a/crates/tree-sitter-aqua/package.json b/crates/tree-sitter-aqua/package.json new file mode 100644 index 0000000..a85c0d8 --- /dev/null +++ b/crates/tree-sitter-aqua/package.json @@ -0,0 +1,17 @@ +{ + "name": "tree-sitter-aqua", + "version": "1.0.0", + "description": "", + "main": "bindings/node", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "nan": "^2.17.0" + }, + "devDependencies": { + "tree-sitter-cli": "^0.20.8" + } +} diff --git a/crates/tree-sitter-aqua/parser/aqua.so b/crates/tree-sitter-aqua/parser/aqua.so new file mode 100755 index 0000000..604c912 Binary files /dev/null and b/crates/tree-sitter-aqua/parser/aqua.so differ diff --git a/crates/tree-sitter-aqua/queries/aqua/highlights.scm b/crates/tree-sitter-aqua/queries/aqua/highlights.scm new file mode 100644 index 0000000..c1bb28e --- /dev/null +++ b/crates/tree-sitter-aqua/queries/aqua/highlights.scm @@ -0,0 +1,60 @@ +;; Literals + +(constant_string (string_quote) @string) +(constant_string (string_content) @string) +(constant_int) @number +(index) @number +(constant_bool) @boolean +(constant_float) @float +(constant_char) @character +(string_interpolation (block) @string.special) +(string_interpolation (name) @string.special) +(line_comment) @comment + +(stmt_code "---" @comment) + +;; Identifiers + +(expr_name (name) @variable) +(type_name (name) @type) + +(pattern_name (name) @variable) +(stmt_def name: (name) @function) +(stmt_type name: (name) @type) +(stmt_enum name: (name) @type) +(stmt_struct name: (name) @type) + +; (expr_call function: (expr_name (name) @function)) +; (expr_method_call name: ((name) @function)) + +((type_name) @type.builtin + (#any-of? @type.builtin + "i8" "i16" "i32" "i64" "i128" + "f32" "f64" + "u8" "u16" "u32" "u64" "u128" + "usize" + "bool" "char" "String" + "Option" "Result" + "Vec" "Dict" "Stream" "Dataflow" "Instance" + "Time" "Duration" "SocketAddress" "File" "Path" "Url" +)) + +;; Keywords + +[ "if" "else" "match" "finally" "try" "catch" "throw" ] @conditional + +[ "loop" "while" "for" "break" "continue" + "from" "in" "as" "desc" "group" "into" "join" "on" "of" "select" "compute" "union" "over" "roll" "order" "where" "with" +] @repeat + +[ + "def" "do" "fun" "return" + "type" "val" "var" "enum" "struct" + "rust" "python" "mod" "use" +] @keyword + +;; Punctuation + +[ ";" ":" "::" "," "." "@" "{" "}" "[" "]" "(" ")" "=" "=>" "_" ] @punctuation + +[ "not" "and" "or" "+" "-" "*" "/" "==" "!=" "<" ">" "<=" ">=" "+=" "-=" "*=" "/=" ".." "..=" "&" ] @operator diff --git a/crates/tree-sitter-aqua/queries/aqua/injections.scm b/crates/tree-sitter-aqua/queries/aqua/injections.scm new file mode 100644 index 0000000..77101d4 --- /dev/null +++ b/crates/tree-sitter-aqua/queries/aqua/injections.scm @@ -0,0 +1,6 @@ +(stmt_code lang: "rust" code: (code) @injection.content (#set! injection.language "rust")) +(stmt_code lang: "python" code: (code) @injection.content (#set! injection.language "python")) +((line_comment) @injection.content + (#lua-match? @injection.content "^#.") + (#set! injection.language "markdown") + (#offset! @injection.content 0 1 0 0)) diff --git a/crates/tree-sitter-aqua/queries/aqua/locals.scm b/crates/tree-sitter-aqua/queries/aqua/locals.scm new file mode 100644 index 0000000..7b6cf45 --- /dev/null +++ b/crates/tree-sitter-aqua/queries/aqua/locals.scm @@ -0,0 +1,17 @@ +(stmt_def name: (name) @definition.function) +(stmt_type name: (name) @definition.type) +(stmt_enum name: (name) @definition.type) +(pattern_name (name) @definition.var) + +(expr_name (name) @reference) +(type_name (name) @reference) +(expr_call function: (expr_name (name) @reference)) +(expr_method_call name: ((name) @reference)) + +[ + (program) + ((_) @x (#has-parent? @x stmt_def)) + ((_) @x (#has-parent? @x stmt_type)) + ((_) @x (#has-parent? @x stmt_enum)) + (block) +] @scope diff --git a/crates/tree-sitter-aqua/queries/aqua/tags.scm b/crates/tree-sitter-aqua/queries/aqua/tags.scm new file mode 100644 index 0000000..e69de29 diff --git a/crates/tree-sitter-aqua/src/grammar.json b/crates/tree-sitter-aqua/src/grammar.json new file mode 100644 index 0000000..d0a048b --- /dev/null +++ b/crates/tree-sitter-aqua/src/grammar.json @@ -0,0 +1,3761 @@ +{ + "name": "aqua", + "word": "name", + "rules": { + "program": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_stmts" + }, + { + "type": "BLANK" + } + ] + }, + "_whitespace": { + "type": "PATTERN", + "value": "[ \\t\\r\\n]" + }, + "line_comment": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "#" + }, + { + "type": "PATTERN", + "value": ".*" + } + ] + } + }, + "name": { + "type": "PATTERN", + "value": "[a-zA-Z_][a-zA-Z0-9_]*" + }, + "index": { + "type": "PATTERN", + "value": "[0-9]+" + }, + "meta": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_attributes" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_attributes": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "attribute" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "attribute" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "attribute": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_constant" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_constant": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "constant_int" + }, + { + "type": "SYMBOL", + "name": "constant_float" + }, + { + "type": "SYMBOL", + "name": "constant_string" + }, + { + "type": "SYMBOL", + "name": "constant_char" + }, + { + "type": "SYMBOL", + "name": "constant_bool" + }, + { + "type": "SYMBOL", + "name": "constant_unit" + } + ] + }, + "constant_int": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "-?[0-9]+" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[a-zA-Z_][a-zA-Z0-9_]*" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "constant_float": { + "type": "PATTERN", + "value": "-?[0-9]+\\.[0-9]+" + }, + "constant_string": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "string_quote" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string_interpolation" + }, + { + "type": "SYMBOL", + "name": "string_content" + } + ] + } + }, + { + "type": "SYMBOL", + "name": "string_quote" + } + ] + }, + "string_quote": { + "type": "STRING", + "value": "\"" + }, + "string_content": { + "type": "PATTERN", + "value": "[^$\"]+" + }, + "string_interpolation": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "$" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "block" + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + } + ] + }, + "constant_char": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "'" + }, + { + "type": "PATTERN", + "value": "[^']*" + }, + { + "type": "STRING", + "value": "'" + } + ] + }, + "constant_bool": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "true" + }, + { + "type": "STRING", + "value": "false" + } + ] + }, + "constant_unit": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "_stmts": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "_stmt" + } + }, + "_stmt": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "stmt_def" + }, + { + "type": "SYMBOL", + "name": "stmt_type" + }, + { + "type": "SYMBOL", + "name": "stmt_enum" + }, + { + "type": "SYMBOL", + "name": "stmt_struct" + }, + { + "type": "SYMBOL", + "name": "stmt_val" + }, + { + "type": "SYMBOL", + "name": "stmt_var" + }, + { + "type": "SYMBOL", + "name": "stmt_expr" + }, + { + "type": "SYMBOL", + "name": "stmt_code" + }, + { + "type": "SYMBOL", + "name": "stmt_mod" + }, + { + "type": "SYMBOL", + "name": "stmt_use" + }, + { + "type": "SYMBOL", + "name": "_stmt_noop" + } + ] + }, + "stmt_def": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "meta" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "def" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_generics" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_params" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + } + ] + } + } + ] + }, + "stmt_type": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "meta" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "type" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_generics" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_type" + }, + { + "type": "STRING", + "value": ";" + } + ] + } + } + ] + }, + "stmt_enum": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "meta" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "enum" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_generics" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "variant" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "variant" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + } + ] + }, + "variant": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "stmt_struct": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "meta" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "struct" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_generics" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + } + ] + } + } + ] + }, + "stmt_val": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "val" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ";" + } + ] + } + }, + "stmt_var": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "var" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "stmt_expr": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "stmt_code": { + "type": "PREC", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "---" + }, + { + "type": "FIELD", + "name": "lang", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "rust" + }, + { + "type": "STRING", + "value": "python" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "code", + "content": { + "type": "SYMBOL", + "name": "code" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "---" + } + ] + } + }, + "stmt_mod": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "mod" + }, + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_stmts" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "stmt_use": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "use" + }, + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "code": { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[^-]+|-[^-]" + } + }, + "_stmt_noop": { + "type": "STRING", + "value": ";" + }, + "_types": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_type" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_type": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "type_fun" + }, + { + "type": "SYMBOL", + "name": "type_record_concat" + }, + { + "type": "SYMBOL", + "name": "type_paren" + }, + { + "type": "SYMBOL", + "name": "type_nominal" + }, + { + "type": "SYMBOL", + "name": "type_tuple" + }, + { + "type": "SYMBOL", + "name": "type_record" + }, + { + "type": "SYMBOL", + "name": "type_array" + }, + { + "type": "SYMBOL", + "name": "type_unit" + }, + { + "type": "SYMBOL", + "name": "type_never" + }, + { + "type": "SYMBOL", + "name": "type_wild" + } + ] + }, + "type_fun": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "fun" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + "type_record_concat": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_type" + }, + { + "type": "STRING", + "value": "&" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + "type_paren": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_type" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "type_nominal": { + "type": "PREC_LEFT", + "value": 3, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type_name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "type_name": { + "type": "SYMBOL", + "name": "name" + }, + "type_tuple": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_type" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "type_record": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "_type_fields" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "type_array": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "type_unit": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "type_never": { + "type": "STRING", + "value": "!" + }, + "type_wild": { + "type": "STRING", + "value": "_" + }, + "_type_fields": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type_field" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "type_field" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "type_field": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + ] + }, + "generic": { + "type": "SYMBOL", + "name": "name" + }, + "_generics": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "generic" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "generic" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_params": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_param" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_param" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_param": { + "type": "PREC", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + "_patterns": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_pattern" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_pattern_fields": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "pattern_field" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "pattern_field" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "pattern_field": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_pattern" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pattern_annot" + }, + { + "type": "SYMBOL", + "name": "pattern_or" + }, + { + "type": "SYMBOL", + "name": "pattern_record_concat" + }, + { + "type": "SYMBOL", + "name": "pattern_paren" + }, + { + "type": "SYMBOL", + "name": "pattern_constant" + }, + { + "type": "SYMBOL", + "name": "pattern_name" + }, + { + "type": "SYMBOL", + "name": "pattern_variant" + }, + { + "type": "SYMBOL", + "name": "pattern_tuple" + }, + { + "type": "SYMBOL", + "name": "pattern_record" + }, + { + "type": "SYMBOL", + "name": "pattern_array" + }, + { + "type": "SYMBOL", + "name": "pattern_wild" + } + ] + }, + "pattern_annot": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + "pattern_or": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "or" + }, + { + "type": "SYMBOL", + "name": "_pattern" + } + ] + } + }, + "pattern_record_concat": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "&" + }, + { + "type": "SYMBOL", + "name": "_pattern" + } + ] + } + }, + "pattern_paren": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "pattern_constant": { + "type": "SYMBOL", + "name": "_constant" + }, + "pattern_name": { + "type": "SYMBOL", + "name": "name" + }, + "pattern_variant": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "variant_name" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "variant_name" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + "pattern_tuple": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "pattern_record": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "pattern_array": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "pattern_wild": { + "type": "STRING", + "value": "_" + }, + "variant_name": { + "type": "SYMBOL", + "name": "name" + }, + "_exprs": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_expr": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expr_return" + }, + { + "type": "SYMBOL", + "name": "expr_break" + }, + { + "type": "SYMBOL", + "name": "expr_continue" + }, + { + "type": "SYMBOL", + "name": "expr_throw" + }, + { + "type": "SYMBOL", + "name": "expr_query" + }, + { + "type": "SYMBOL", + "name": "expr_fun" + }, + { + "type": "SYMBOL", + "name": "expr_binary" + }, + { + "type": "SYMBOL", + "name": "expr_annot" + }, + { + "type": "SYMBOL", + "name": "expr_call" + }, + { + "type": "SYMBOL", + "name": "expr_tuple_access" + }, + { + "type": "SYMBOL", + "name": "expr_record_access" + }, + { + "type": "SYMBOL", + "name": "expr_array_access" + }, + { + "type": "SYMBOL", + "name": "expr_method_call" + }, + { + "type": "SYMBOL", + "name": "expr_paren" + }, + { + "type": "SYMBOL", + "name": "expr_constant" + }, + { + "type": "SYMBOL", + "name": "expr_name" + }, + { + "type": "SYMBOL", + "name": "expr_array" + }, + { + "type": "SYMBOL", + "name": "expr_tuple" + }, + { + "type": "SYMBOL", + "name": "expr_record" + }, + { + "type": "SYMBOL", + "name": "expr_do" + }, + { + "type": "SYMBOL", + "name": "expr_if" + }, + { + "type": "SYMBOL", + "name": "expr_match" + }, + { + "type": "SYMBOL", + "name": "expr_loop" + }, + { + "type": "SYMBOL", + "name": "expr_while" + }, + { + "type": "SYMBOL", + "name": "expr_for" + }, + { + "type": "SYMBOL", + "name": "expr_try" + }, + { + "type": "SYMBOL", + "name": "expr_record_variant" + } + ] + }, + "expr_return": { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "return" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "expr_break": { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "break" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "expr_continue": { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "STRING", + "value": "continue" + } + }, + "expr_throw": { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "throw" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + "expr_query": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "query_from" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_query_stmts" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "_rust": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[^{}]+" + }, + { + "type": "SYMBOL", + "name": "_rust" + } + ] + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_query_stmts": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "_query_stmt" + } + }, + "_query_stmt": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "query_from" + }, + { + "type": "SYMBOL", + "name": "query_where" + }, + { + "type": "SYMBOL", + "name": "query_join" + }, + { + "type": "SYMBOL", + "name": "query_union" + }, + { + "type": "SYMBOL", + "name": "query_group" + }, + { + "type": "SYMBOL", + "name": "query_over" + }, + { + "type": "SYMBOL", + "name": "query_select" + }, + { + "type": "SYMBOL", + "name": "query_roll" + }, + { + "type": "SYMBOL", + "name": "query_compute" + }, + { + "type": "SYMBOL", + "name": "query_select" + }, + { + "type": "SYMBOL", + "name": "query_into" + }, + { + "type": "SYMBOL", + "name": "query_order" + }, + { + "type": "SYMBOL", + "name": "query_val" + } + ] + }, + "query_from": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "query_where": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "where" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "query_join": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "join" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "on" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "query_union": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "union" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "query_group": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "group" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_query_stmts" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "query_over": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "over" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_query_stmts" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "query_roll": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "roll" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_of" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "query_compute": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "compute" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_of" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "query_select": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "select" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_as" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "query_val": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "with" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + "query_into": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "into" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "query_order": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "order" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "desc" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "_as": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + }, + "_of": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "of" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + "expr_fun": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "fun" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + } + ] + } + }, + "expr_binary": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "STRING", + "value": "+=" + }, + { + "type": "STRING", + "value": "-=" + }, + { + "type": "STRING", + "value": "*=" + }, + { + "type": "STRING", + "value": "/=" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": ".." + }, + { + "type": "STRING", + "value": "..=" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 3, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "and" + }, + { + "type": "STRING", + "value": "or" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "==" + }, + { + "type": "STRING", + "value": "!=" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 5, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "<" + }, + { + "type": "STRING", + "value": ">" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "STRING", + "value": ">=" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 6, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 7, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "STRING", + "value": "/" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + } + ] + }, + "expr_unary": { + "type": "PREC", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "not" + }, + { + "type": "STRING", + "value": "-" + }, + { + "type": "STRING", + "value": "+" + } + ] + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + }, + "expr_annot": { + "type": "PREC", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_type" + } + ] + } + }, + "expr_call": { + "type": "PREC", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "function", + "content": { + "type": "SYMBOL", + "name": "_expr" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "::" + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_exprs" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "expr_tuple_access": { + "type": "PREC", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "index" + } + ] + } + }, + "expr_record_access": { + "type": "PREC", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + } + }, + "expr_array_access": { + "type": "PREC", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "]" + } + ] + } + }, + "expr_method_call": { + "type": "PREC", + "value": 12, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "::" + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SYMBOL", + "name": "_types" + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_exprs" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "expr_record_variant": { + "type": "PREC", + "value": 13, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expr_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + }, + "expr_paren": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "expr_constant": { + "type": "SYMBOL", + "name": "_constant" + }, + "expr_name": { + "type": "PREC", + "value": 14, + "content": { + "type": "SYMBOL", + "name": "name" + } + }, + "expr_array": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_exprs" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "expr_tuple": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_exprs" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "expr_record": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expr_fields" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_expr_fields": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expr_field" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expr_field" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "expr_field": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expr_field_expr" + }, + { + "type": "SYMBOL", + "name": "expr_field_name" + } + ] + }, + "expr_field_expr": { + "type": "PREC", + "value": 15, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "expr_field_name": { + "type": "PREC", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + } + }, + "expr_do": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "do" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + "expr_if": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "SYMBOL", + "name": "block" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "else" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "expr_match": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "match" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "_arms" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "expr_loop": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "loop" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + "expr_while": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "while" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + "expr_for": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "for" + }, + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + "expr_try": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "try" + }, + { + "type": "SYMBOL", + "name": "block" + }, + { + "type": "STRING", + "value": "catch" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_arms" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + }, + { + "type": "STRING", + "value": "finally" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + "block": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_stmts" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expr" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_arms": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "arm" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "arm" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "arm": { + "type": "FIELD", + "name": "arm", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_pattern" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "_expr" + } + ] + } + } + }, + "extras": [ + { + "type": "SYMBOL", + "name": "_whitespace" + }, + { + "type": "SYMBOL", + "name": "line_comment" + } + ], + "conflicts": [], + "precedences": [], + "externals": [], + "inline": [], + "supertypes": [] +} + diff --git a/crates/tree-sitter-aqua/src/node-types.json b/crates/tree-sitter-aqua/src/node-types.json new file mode 100644 index 0000000..49846b1 --- /dev/null +++ b/crates/tree-sitter-aqua/src/node-types.json @@ -0,0 +1,7667 @@ +[ + { + "type": "arm", + "named": true, + "fields": { + "arm": { + "multiple": true, + "required": true, + "types": [ + { + "type": "=>", + "named": false + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + } + }, + { + "type": "attribute", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "constant_bool", + "named": true + }, + { + "type": "constant_char", + "named": true + }, + { + "type": "constant_float", + "named": true + }, + { + "type": "constant_int", + "named": true + }, + { + "type": "constant_string", + "named": true + }, + { + "type": "constant_unit", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "stmt_code", + "named": true + }, + { + "type": "stmt_def", + "named": true + }, + { + "type": "stmt_enum", + "named": true + }, + { + "type": "stmt_expr", + "named": true + }, + { + "type": "stmt_mod", + "named": true + }, + { + "type": "stmt_struct", + "named": true + }, + { + "type": "stmt_type", + "named": true + }, + { + "type": "stmt_use", + "named": true + }, + { + "type": "stmt_val", + "named": true + }, + { + "type": "stmt_var", + "named": true + } + ] + } + }, + { + "type": "code", + "named": true, + "fields": {} + }, + { + "type": "constant_bool", + "named": true, + "fields": {} + }, + { + "type": "constant_char", + "named": true, + "fields": {} + }, + { + "type": "constant_string", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "string_content", + "named": true + }, + { + "type": "string_interpolation", + "named": true + }, + { + "type": "string_quote", + "named": true + } + ] + } + }, + { + "type": "constant_unit", + "named": true, + "fields": {} + }, + { + "type": "expr_annot", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "expr_array", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_array_access", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_binary", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_break", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_call", + "named": true, + "fields": { + "function": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "expr_constant", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "constant_bool", + "named": true + }, + { + "type": "constant_char", + "named": true + }, + { + "type": "constant_float", + "named": true + }, + { + "type": "constant_int", + "named": true + }, + { + "type": "constant_string", + "named": true + }, + { + "type": "constant_unit", + "named": true + } + ] + } + }, + { + "type": "expr_continue", + "named": true, + "fields": {} + }, + { + "type": "expr_do", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + { + "type": "expr_field", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_field_expr", + "named": true + }, + { + "type": "expr_field_name", + "named": true + } + ] + } + }, + { + "type": "expr_field_expr", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "expr_field_name", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "expr_for", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "expr_fun", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "expr_if", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_loop", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + { + "type": "expr_match", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "arm", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_method_call", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "expr_name", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "expr_paren", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_query", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "query_compute", + "named": true + }, + { + "type": "query_from", + "named": true + }, + { + "type": "query_group", + "named": true + }, + { + "type": "query_into", + "named": true + }, + { + "type": "query_join", + "named": true + }, + { + "type": "query_order", + "named": true + }, + { + "type": "query_over", + "named": true + }, + { + "type": "query_roll", + "named": true + }, + { + "type": "query_select", + "named": true + }, + { + "type": "query_union", + "named": true + }, + { + "type": "query_val", + "named": true + }, + { + "type": "query_where", + "named": true + } + ] + } + }, + { + "type": "expr_record", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expr_field", + "named": true + } + ] + } + }, + { + "type": "expr_record_access", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "expr_record_variant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_field", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "expr_return", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_throw", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_try", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "arm", + "named": true + }, + { + "type": "block", + "named": true + } + ] + } + }, + { + "type": "expr_tuple", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "expr_tuple_access", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "index", + "named": true + } + ] + } + }, + { + "type": "expr_while", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "generic", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "meta", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "attribute", + "named": true + } + ] + } + }, + { + "type": "pattern_annot", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_array", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_constant", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "constant_bool", + "named": true + }, + { + "type": "constant_char", + "named": true + }, + { + "type": "constant_float", + "named": true + }, + { + "type": "constant_int", + "named": true + }, + { + "type": "constant_string", + "named": true + }, + { + "type": "constant_unit", + "named": true + } + ] + } + }, + { + "type": "pattern_field", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_name", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "pattern_or", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_paren", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_record", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern_field", + "named": true + } + ] + } + }, + { + "type": "pattern_record_concat", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_tuple", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "pattern_variant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_field", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + }, + { + "type": "variant_name", + "named": true + } + ] + } + }, + { + "type": "pattern_wild", + "named": true, + "fields": {} + }, + { + "type": "program", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "stmt_code", + "named": true + }, + { + "type": "stmt_def", + "named": true + }, + { + "type": "stmt_enum", + "named": true + }, + { + "type": "stmt_expr", + "named": true + }, + { + "type": "stmt_mod", + "named": true + }, + { + "type": "stmt_struct", + "named": true + }, + { + "type": "stmt_type", + "named": true + }, + { + "type": "stmt_use", + "named": true + }, + { + "type": "stmt_val", + "named": true + }, + { + "type": "stmt_var", + "named": true + } + ] + } + }, + { + "type": "query_compute", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "query_from", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "query_group", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "query_compute", + "named": true + }, + { + "type": "query_from", + "named": true + }, + { + "type": "query_group", + "named": true + }, + { + "type": "query_into", + "named": true + }, + { + "type": "query_join", + "named": true + }, + { + "type": "query_order", + "named": true + }, + { + "type": "query_over", + "named": true + }, + { + "type": "query_roll", + "named": true + }, + { + "type": "query_select", + "named": true + }, + { + "type": "query_union", + "named": true + }, + { + "type": "query_val", + "named": true + }, + { + "type": "query_where", + "named": true + } + ] + } + }, + { + "type": "query_into", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "query_join", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "query_order", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "query_over", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "query_compute", + "named": true + }, + { + "type": "query_from", + "named": true + }, + { + "type": "query_group", + "named": true + }, + { + "type": "query_into", + "named": true + }, + { + "type": "query_join", + "named": true + }, + { + "type": "query_order", + "named": true + }, + { + "type": "query_over", + "named": true + }, + { + "type": "query_roll", + "named": true + }, + { + "type": "query_select", + "named": true + }, + { + "type": "query_union", + "named": true + }, + { + "type": "query_val", + "named": true + }, + { + "type": "query_where", + "named": true + } + ] + } + }, + { + "type": "query_roll", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "query_select", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "query_union", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "query_val", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "query_where", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "stmt_code", + "named": true, + "fields": { + "code": { + "multiple": false, + "required": false, + "types": [ + { + "type": "code", + "named": true + } + ] + }, + "lang": { + "multiple": false, + "required": true, + "types": [ + { + "type": "python", + "named": false + }, + { + "type": "rust", + "named": false + } + ] + } + } + }, + { + "type": "stmt_def", + "named": true, + "fields": { + "inner": { + "multiple": true, + "required": true, + "types": [ + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": ";", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "block", + "named": true + }, + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "generic", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "meta", + "named": true + } + ] + } + }, + { + "type": "stmt_enum", + "named": true, + "fields": { + "inner": { + "multiple": true, + "required": true, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "generic", + "named": true + }, + { + "type": "variant", + "named": true + }, + { + "type": "{", + "named": false + }, + { + "type": "}", + "named": false + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "meta", + "named": true + } + ] + } + }, + { + "type": "stmt_expr", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + } + ] + } + }, + { + "type": "stmt_mod", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "stmt_code", + "named": true + }, + { + "type": "stmt_def", + "named": true + }, + { + "type": "stmt_enum", + "named": true + }, + { + "type": "stmt_expr", + "named": true + }, + { + "type": "stmt_mod", + "named": true + }, + { + "type": "stmt_struct", + "named": true + }, + { + "type": "stmt_type", + "named": true + }, + { + "type": "stmt_use", + "named": true + }, + { + "type": "stmt_val", + "named": true + }, + { + "type": "stmt_var", + "named": true + } + ] + } + }, + { + "type": "stmt_struct", + "named": true, + "fields": { + "inner": { + "multiple": true, + "required": true, + "types": [ + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "generic", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_field", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + }, + { + "type": "{", + "named": false + }, + { + "type": "}", + "named": false + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "meta", + "named": true + } + ] + } + }, + { + "type": "stmt_type", + "named": true, + "fields": { + "inner": { + "multiple": true, + "required": true, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": ";", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "generic", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "meta", + "named": true + } + ] + } + }, + { + "type": "stmt_use", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "stmt_val", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "stmt_var", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expr_annot", + "named": true + }, + { + "type": "expr_array", + "named": true + }, + { + "type": "expr_array_access", + "named": true + }, + { + "type": "expr_binary", + "named": true + }, + { + "type": "expr_break", + "named": true + }, + { + "type": "expr_call", + "named": true + }, + { + "type": "expr_constant", + "named": true + }, + { + "type": "expr_continue", + "named": true + }, + { + "type": "expr_do", + "named": true + }, + { + "type": "expr_for", + "named": true + }, + { + "type": "expr_fun", + "named": true + }, + { + "type": "expr_if", + "named": true + }, + { + "type": "expr_loop", + "named": true + }, + { + "type": "expr_match", + "named": true + }, + { + "type": "expr_method_call", + "named": true + }, + { + "type": "expr_name", + "named": true + }, + { + "type": "expr_paren", + "named": true + }, + { + "type": "expr_query", + "named": true + }, + { + "type": "expr_record", + "named": true + }, + { + "type": "expr_record_access", + "named": true + }, + { + "type": "expr_record_variant", + "named": true + }, + { + "type": "expr_return", + "named": true + }, + { + "type": "expr_throw", + "named": true + }, + { + "type": "expr_try", + "named": true + }, + { + "type": "expr_tuple", + "named": true + }, + { + "type": "expr_tuple_access", + "named": true + }, + { + "type": "expr_while", + "named": true + }, + { + "type": "pattern_annot", + "named": true + }, + { + "type": "pattern_array", + "named": true + }, + { + "type": "pattern_constant", + "named": true + }, + { + "type": "pattern_name", + "named": true + }, + { + "type": "pattern_or", + "named": true + }, + { + "type": "pattern_paren", + "named": true + }, + { + "type": "pattern_record", + "named": true + }, + { + "type": "pattern_record_concat", + "named": true + }, + { + "type": "pattern_tuple", + "named": true + }, + { + "type": "pattern_variant", + "named": true + }, + { + "type": "pattern_wild", + "named": true + } + ] + } + }, + { + "type": "string_interpolation", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "type_array", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_field", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_fun", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_name", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "type_nominal", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_name", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_paren", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_record", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type_field", + "named": true + } + ] + } + }, + { + "type": "type_record_concat", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_tuple", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type_array", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "type_unit", + "named": true, + "fields": {} + }, + { + "type": "type_wild", + "named": true, + "fields": {} + }, + { + "type": "variant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "type_array", + "named": true + }, + { + "type": "type_field", + "named": true + }, + { + "type": "type_fun", + "named": true + }, + { + "type": "type_never", + "named": true + }, + { + "type": "type_nominal", + "named": true + }, + { + "type": "type_paren", + "named": true + }, + { + "type": "type_record", + "named": true + }, + { + "type": "type_record_concat", + "named": true + }, + { + "type": "type_tuple", + "named": true + }, + { + "type": "type_unit", + "named": true + }, + { + "type": "type_wild", + "named": true + } + ] + } + }, + { + "type": "variant_name", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "!=", + "named": false + }, + { + "type": "$", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "'", + "named": false + }, + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "---", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": ".", + "named": false + }, + { + "type": "..", + "named": false + }, + { + "type": "..=", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": "::", + "named": false + }, + { + "type": ";", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": "=>", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": "@", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "_", + "named": false + }, + { + "type": "and", + "named": false + }, + { + "type": "as", + "named": false + }, + { + "type": "break", + "named": false + }, + { + "type": "catch", + "named": false + }, + { + "type": "compute", + "named": false + }, + { + "type": "constant_float", + "named": true + }, + { + "type": "constant_int", + "named": true + }, + { + "type": "continue", + "named": false + }, + { + "type": "def", + "named": false + }, + { + "type": "desc", + "named": false + }, + { + "type": "do", + "named": false + }, + { + "type": "else", + "named": false + }, + { + "type": "enum", + "named": false + }, + { + "type": "false", + "named": false + }, + { + "type": "finally", + "named": false + }, + { + "type": "for", + "named": false + }, + { + "type": "from", + "named": false + }, + { + "type": "fun", + "named": false + }, + { + "type": "group", + "named": false + }, + { + "type": "if", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "index", + "named": true + }, + { + "type": "into", + "named": false + }, + { + "type": "join", + "named": false + }, + { + "type": "line_comment", + "named": true + }, + { + "type": "loop", + "named": false + }, + { + "type": "match", + "named": false + }, + { + "type": "mod", + "named": false + }, + { + "type": "name", + "named": true + }, + { + "type": "not", + "named": false + }, + { + "type": "of", + "named": false + }, + { + "type": "on", + "named": false + }, + { + "type": "or", + "named": false + }, + { + "type": "order", + "named": false + }, + { + "type": "over", + "named": false + }, + { + "type": "python", + "named": false + }, + { + "type": "return", + "named": false + }, + { + "type": "roll", + "named": false + }, + { + "type": "rust", + "named": false + }, + { + "type": "select", + "named": false + }, + { + "type": "string_content", + "named": true + }, + { + "type": "string_quote", + "named": true + }, + { + "type": "struct", + "named": false + }, + { + "type": "throw", + "named": false + }, + { + "type": "true", + "named": false + }, + { + "type": "try", + "named": false + }, + { + "type": "type", + "named": false + }, + { + "type": "type_never", + "named": true + }, + { + "type": "union", + "named": false + }, + { + "type": "use", + "named": false + }, + { + "type": "val", + "named": false + }, + { + "type": "var", + "named": false + }, + { + "type": "where", + "named": false + }, + { + "type": "while", + "named": false + }, + { + "type": "with", + "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "}", + "named": false + } +] \ No newline at end of file diff --git a/crates/tree-sitter-aqua/src/parser.c b/crates/tree-sitter-aqua/src/parser.c new file mode 100644 index 0000000..c7fdc8d --- /dev/null +++ b/crates/tree-sitter-aqua/src/parser.c @@ -0,0 +1,85355 @@ +#include + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 1586 +#define LARGE_STATE_COUNT 44 +#define SYMBOL_COUNT 218 +#define ALIAS_COUNT 0 +#define TOKEN_COUNT 94 +#define EXTERNAL_TOKEN_COUNT 0 +#define FIELD_COUNT 6 +#define MAX_ALIAS_SEQUENCE_LENGTH 14 +#define PRODUCTION_ID_COUNT 26 + +enum { + sym_name = 1, + sym__whitespace = 2, + sym_line_comment = 3, + sym_index = 4, + anon_sym_AT = 5, + anon_sym_LBRACE = 6, + anon_sym_RBRACE = 7, + anon_sym_COMMA = 8, + anon_sym_COLON = 9, + sym_constant_int = 10, + sym_constant_float = 11, + sym_string_quote = 12, + sym_string_content = 13, + anon_sym_DOLLAR = 14, + anon_sym_SQUOTE = 15, + aux_sym_constant_char_token1 = 16, + anon_sym_true = 17, + anon_sym_false = 18, + anon_sym_LPAREN = 19, + anon_sym_RPAREN = 20, + anon_sym_def = 21, + anon_sym_LBRACK = 22, + anon_sym_RBRACK = 23, + anon_sym_EQ = 24, + anon_sym_SEMI = 25, + anon_sym_type = 26, + anon_sym_enum = 27, + anon_sym_struct = 28, + anon_sym_val = 29, + anon_sym_var = 30, + anon_sym_DASH_DASH_DASH = 31, + anon_sym_rust = 32, + anon_sym_python = 33, + anon_sym_mod = 34, + anon_sym_use = 35, + aux_sym_code_token1 = 36, + anon_sym_fun = 37, + anon_sym_AMP = 38, + sym_type_never = 39, + anon_sym__ = 40, + anon_sym_or = 41, + anon_sym_return = 42, + anon_sym_break = 43, + anon_sym_continue = 44, + anon_sym_throw = 45, + anon_sym_from = 46, + anon_sym_in = 47, + anon_sym_where = 48, + anon_sym_join = 49, + anon_sym_on = 50, + anon_sym_union = 51, + anon_sym_group = 52, + anon_sym_over = 53, + anon_sym_roll = 54, + anon_sym_compute = 55, + anon_sym_select = 56, + anon_sym_with = 57, + anon_sym_into = 58, + anon_sym_order = 59, + anon_sym_desc = 60, + anon_sym_as = 61, + anon_sym_of = 62, + anon_sym_PLUS_EQ = 63, + anon_sym_DASH_EQ = 64, + anon_sym_STAR_EQ = 65, + anon_sym_SLASH_EQ = 66, + anon_sym_DOT_DOT = 67, + anon_sym_DOT_DOT_EQ = 68, + anon_sym_and = 69, + anon_sym_EQ_EQ = 70, + anon_sym_BANG_EQ = 71, + anon_sym_LT = 72, + anon_sym_GT = 73, + anon_sym_LT_EQ = 74, + anon_sym_GT_EQ = 75, + anon_sym_PLUS = 76, + anon_sym_DASH = 77, + anon_sym_STAR = 78, + anon_sym_SLASH = 79, + anon_sym_not = 80, + anon_sym_COLON_COLON = 81, + anon_sym_DOT = 82, + anon_sym_do = 83, + anon_sym_if = 84, + anon_sym_else = 85, + anon_sym_match = 86, + anon_sym_loop = 87, + anon_sym_while = 88, + anon_sym_for = 89, + anon_sym_try = 90, + anon_sym_catch = 91, + anon_sym_finally = 92, + anon_sym_EQ_GT = 93, + sym_program = 94, + sym_meta = 95, + sym__attributes = 96, + sym_attribute = 97, + sym__constant = 98, + sym_constant_string = 99, + sym_string_interpolation = 100, + sym_constant_char = 101, + sym_constant_bool = 102, + sym_constant_unit = 103, + aux_sym__stmts = 104, + sym__stmt = 105, + sym_stmt_def = 106, + sym_stmt_type = 107, + sym_stmt_enum = 108, + sym_variant = 109, + sym_stmt_struct = 110, + sym_stmt_val = 111, + sym_stmt_var = 112, + sym_stmt_expr = 113, + sym_stmt_code = 114, + sym_stmt_mod = 115, + sym_stmt_use = 116, + sym_code = 117, + sym__stmt_noop = 118, + sym__types = 119, + sym__type = 120, + sym_type_fun = 121, + sym_type_record_concat = 122, + sym_type_paren = 123, + sym_type_nominal = 124, + sym_type_name = 125, + sym_type_tuple = 126, + sym_type_record = 127, + sym_type_array = 128, + sym_type_unit = 129, + sym_type_wild = 130, + sym__type_fields = 131, + sym_type_field = 132, + sym_generic = 133, + sym__generics = 134, + sym__params = 135, + sym__param = 136, + sym__patterns = 137, + sym__pattern_fields = 138, + sym_pattern_field = 139, + sym__pattern = 140, + sym_pattern_annot = 141, + sym_pattern_or = 142, + sym_pattern_record_concat = 143, + sym_pattern_paren = 144, + sym_pattern_constant = 145, + sym_pattern_name = 146, + sym_pattern_variant = 147, + sym_pattern_tuple = 148, + sym_pattern_record = 149, + sym_pattern_array = 150, + sym_pattern_wild = 151, + sym_variant_name = 152, + sym__exprs = 153, + sym__expr = 154, + sym_expr_return = 155, + sym_expr_break = 156, + sym_expr_continue = 157, + sym_expr_throw = 158, + sym_expr_query = 159, + aux_sym__query_stmts = 160, + sym__query_stmt = 161, + sym_query_from = 162, + sym_query_where = 163, + sym_query_join = 164, + sym_query_union = 165, + sym_query_group = 166, + sym_query_over = 167, + sym_query_roll = 168, + sym_query_compute = 169, + sym_query_select = 170, + sym_query_val = 171, + sym_query_into = 172, + sym_query_order = 173, + sym__as = 174, + sym__of = 175, + sym_expr_fun = 176, + sym_expr_binary = 177, + sym_expr_annot = 178, + sym_expr_call = 179, + sym_expr_tuple_access = 180, + sym_expr_record_access = 181, + sym_expr_array_access = 182, + sym_expr_method_call = 183, + sym_expr_record_variant = 184, + sym_expr_paren = 185, + sym_expr_constant = 186, + sym_expr_name = 187, + sym_expr_array = 188, + sym_expr_tuple = 189, + sym_expr_record = 190, + sym__expr_fields = 191, + sym_expr_field = 192, + sym_expr_field_expr = 193, + sym_expr_field_name = 194, + sym_expr_do = 195, + sym_expr_if = 196, + sym_expr_match = 197, + sym_expr_loop = 198, + sym_expr_while = 199, + sym_expr_for = 200, + sym_expr_try = 201, + sym_block = 202, + sym__arms = 203, + sym_arm = 204, + aux_sym__attributes_repeat1 = 205, + aux_sym_constant_string_repeat1 = 206, + aux_sym_stmt_enum_repeat1 = 207, + aux_sym_code_repeat1 = 208, + aux_sym__types_repeat1 = 209, + aux_sym__type_fields_repeat1 = 210, + aux_sym__generics_repeat1 = 211, + aux_sym__params_repeat1 = 212, + aux_sym__patterns_repeat1 = 213, + aux_sym__pattern_fields_repeat1 = 214, + aux_sym__exprs_repeat1 = 215, + aux_sym__expr_fields_repeat1 = 216, + aux_sym__arms_repeat1 = 217, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_name] = "name", + [sym__whitespace] = "_whitespace", + [sym_line_comment] = "line_comment", + [sym_index] = "index", + [anon_sym_AT] = "@", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_COMMA] = ",", + [anon_sym_COLON] = ":", + [sym_constant_int] = "constant_int", + [sym_constant_float] = "constant_float", + [sym_string_quote] = "string_quote", + [sym_string_content] = "string_content", + [anon_sym_DOLLAR] = "$", + [anon_sym_SQUOTE] = "'", + [aux_sym_constant_char_token1] = "constant_char_token1", + [anon_sym_true] = "true", + [anon_sym_false] = "false", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", + [anon_sym_def] = "def", + [anon_sym_LBRACK] = "[", + [anon_sym_RBRACK] = "]", + [anon_sym_EQ] = "=", + [anon_sym_SEMI] = ";", + [anon_sym_type] = "type", + [anon_sym_enum] = "enum", + [anon_sym_struct] = "struct", + [anon_sym_val] = "val", + [anon_sym_var] = "var", + [anon_sym_DASH_DASH_DASH] = "---", + [anon_sym_rust] = "rust", + [anon_sym_python] = "python", + [anon_sym_mod] = "mod", + [anon_sym_use] = "use", + [aux_sym_code_token1] = "code_token1", + [anon_sym_fun] = "fun", + [anon_sym_AMP] = "&", + [sym_type_never] = "type_never", + [anon_sym__] = "_", + [anon_sym_or] = "or", + [anon_sym_return] = "return", + [anon_sym_break] = "break", + [anon_sym_continue] = "continue", + [anon_sym_throw] = "throw", + [anon_sym_from] = "from", + [anon_sym_in] = "in", + [anon_sym_where] = "where", + [anon_sym_join] = "join", + [anon_sym_on] = "on", + [anon_sym_union] = "union", + [anon_sym_group] = "group", + [anon_sym_over] = "over", + [anon_sym_roll] = "roll", + [anon_sym_compute] = "compute", + [anon_sym_select] = "select", + [anon_sym_with] = "with", + [anon_sym_into] = "into", + [anon_sym_order] = "order", + [anon_sym_desc] = "desc", + [anon_sym_as] = "as", + [anon_sym_of] = "of", + [anon_sym_PLUS_EQ] = "+=", + [anon_sym_DASH_EQ] = "-=", + [anon_sym_STAR_EQ] = "*=", + [anon_sym_SLASH_EQ] = "/=", + [anon_sym_DOT_DOT] = "..", + [anon_sym_DOT_DOT_EQ] = "..=", + [anon_sym_and] = "and", + [anon_sym_EQ_EQ] = "==", + [anon_sym_BANG_EQ] = "!=", + [anon_sym_LT] = "<", + [anon_sym_GT] = ">", + [anon_sym_LT_EQ] = "<=", + [anon_sym_GT_EQ] = ">=", + [anon_sym_PLUS] = "+", + [anon_sym_DASH] = "-", + [anon_sym_STAR] = "*", + [anon_sym_SLASH] = "/", + [anon_sym_not] = "not", + [anon_sym_COLON_COLON] = "::", + [anon_sym_DOT] = ".", + [anon_sym_do] = "do", + [anon_sym_if] = "if", + [anon_sym_else] = "else", + [anon_sym_match] = "match", + [anon_sym_loop] = "loop", + [anon_sym_while] = "while", + [anon_sym_for] = "for", + [anon_sym_try] = "try", + [anon_sym_catch] = "catch", + [anon_sym_finally] = "finally", + [anon_sym_EQ_GT] = "=>", + [sym_program] = "program", + [sym_meta] = "meta", + [sym__attributes] = "_attributes", + [sym_attribute] = "attribute", + [sym__constant] = "_constant", + [sym_constant_string] = "constant_string", + [sym_string_interpolation] = "string_interpolation", + [sym_constant_char] = "constant_char", + [sym_constant_bool] = "constant_bool", + [sym_constant_unit] = "constant_unit", + [aux_sym__stmts] = "_stmts", + [sym__stmt] = "_stmt", + [sym_stmt_def] = "stmt_def", + [sym_stmt_type] = "stmt_type", + [sym_stmt_enum] = "stmt_enum", + [sym_variant] = "variant", + [sym_stmt_struct] = "stmt_struct", + [sym_stmt_val] = "stmt_val", + [sym_stmt_var] = "stmt_var", + [sym_stmt_expr] = "stmt_expr", + [sym_stmt_code] = "stmt_code", + [sym_stmt_mod] = "stmt_mod", + [sym_stmt_use] = "stmt_use", + [sym_code] = "code", + [sym__stmt_noop] = "_stmt_noop", + [sym__types] = "_types", + [sym__type] = "_type", + [sym_type_fun] = "type_fun", + [sym_type_record_concat] = "type_record_concat", + [sym_type_paren] = "type_paren", + [sym_type_nominal] = "type_nominal", + [sym_type_name] = "type_name", + [sym_type_tuple] = "type_tuple", + [sym_type_record] = "type_record", + [sym_type_array] = "type_array", + [sym_type_unit] = "type_unit", + [sym_type_wild] = "type_wild", + [sym__type_fields] = "_type_fields", + [sym_type_field] = "type_field", + [sym_generic] = "generic", + [sym__generics] = "_generics", + [sym__params] = "_params", + [sym__param] = "_param", + [sym__patterns] = "_patterns", + [sym__pattern_fields] = "_pattern_fields", + [sym_pattern_field] = "pattern_field", + [sym__pattern] = "_pattern", + [sym_pattern_annot] = "pattern_annot", + [sym_pattern_or] = "pattern_or", + [sym_pattern_record_concat] = "pattern_record_concat", + [sym_pattern_paren] = "pattern_paren", + [sym_pattern_constant] = "pattern_constant", + [sym_pattern_name] = "pattern_name", + [sym_pattern_variant] = "pattern_variant", + [sym_pattern_tuple] = "pattern_tuple", + [sym_pattern_record] = "pattern_record", + [sym_pattern_array] = "pattern_array", + [sym_pattern_wild] = "pattern_wild", + [sym_variant_name] = "variant_name", + [sym__exprs] = "_exprs", + [sym__expr] = "_expr", + [sym_expr_return] = "expr_return", + [sym_expr_break] = "expr_break", + [sym_expr_continue] = "expr_continue", + [sym_expr_throw] = "expr_throw", + [sym_expr_query] = "expr_query", + [aux_sym__query_stmts] = "_query_stmts", + [sym__query_stmt] = "_query_stmt", + [sym_query_from] = "query_from", + [sym_query_where] = "query_where", + [sym_query_join] = "query_join", + [sym_query_union] = "query_union", + [sym_query_group] = "query_group", + [sym_query_over] = "query_over", + [sym_query_roll] = "query_roll", + [sym_query_compute] = "query_compute", + [sym_query_select] = "query_select", + [sym_query_val] = "query_val", + [sym_query_into] = "query_into", + [sym_query_order] = "query_order", + [sym__as] = "_as", + [sym__of] = "_of", + [sym_expr_fun] = "expr_fun", + [sym_expr_binary] = "expr_binary", + [sym_expr_annot] = "expr_annot", + [sym_expr_call] = "expr_call", + [sym_expr_tuple_access] = "expr_tuple_access", + [sym_expr_record_access] = "expr_record_access", + [sym_expr_array_access] = "expr_array_access", + [sym_expr_method_call] = "expr_method_call", + [sym_expr_record_variant] = "expr_record_variant", + [sym_expr_paren] = "expr_paren", + [sym_expr_constant] = "expr_constant", + [sym_expr_name] = "expr_name", + [sym_expr_array] = "expr_array", + [sym_expr_tuple] = "expr_tuple", + [sym_expr_record] = "expr_record", + [sym__expr_fields] = "_expr_fields", + [sym_expr_field] = "expr_field", + [sym_expr_field_expr] = "expr_field_expr", + [sym_expr_field_name] = "expr_field_name", + [sym_expr_do] = "expr_do", + [sym_expr_if] = "expr_if", + [sym_expr_match] = "expr_match", + [sym_expr_loop] = "expr_loop", + [sym_expr_while] = "expr_while", + [sym_expr_for] = "expr_for", + [sym_expr_try] = "expr_try", + [sym_block] = "block", + [sym__arms] = "_arms", + [sym_arm] = "arm", + [aux_sym__attributes_repeat1] = "_attributes_repeat1", + [aux_sym_constant_string_repeat1] = "constant_string_repeat1", + [aux_sym_stmt_enum_repeat1] = "stmt_enum_repeat1", + [aux_sym_code_repeat1] = "code_repeat1", + [aux_sym__types_repeat1] = "_types_repeat1", + [aux_sym__type_fields_repeat1] = "_type_fields_repeat1", + [aux_sym__generics_repeat1] = "_generics_repeat1", + [aux_sym__params_repeat1] = "_params_repeat1", + [aux_sym__patterns_repeat1] = "_patterns_repeat1", + [aux_sym__pattern_fields_repeat1] = "_pattern_fields_repeat1", + [aux_sym__exprs_repeat1] = "_exprs_repeat1", + [aux_sym__expr_fields_repeat1] = "_expr_fields_repeat1", + [aux_sym__arms_repeat1] = "_arms_repeat1", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_name] = sym_name, + [sym__whitespace] = sym__whitespace, + [sym_line_comment] = sym_line_comment, + [sym_index] = sym_index, + [anon_sym_AT] = anon_sym_AT, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_COLON] = anon_sym_COLON, + [sym_constant_int] = sym_constant_int, + [sym_constant_float] = sym_constant_float, + [sym_string_quote] = sym_string_quote, + [sym_string_content] = sym_string_content, + [anon_sym_DOLLAR] = anon_sym_DOLLAR, + [anon_sym_SQUOTE] = anon_sym_SQUOTE, + [aux_sym_constant_char_token1] = aux_sym_constant_char_token1, + [anon_sym_true] = anon_sym_true, + [anon_sym_false] = anon_sym_false, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_def] = anon_sym_def, + [anon_sym_LBRACK] = anon_sym_LBRACK, + [anon_sym_RBRACK] = anon_sym_RBRACK, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_SEMI] = anon_sym_SEMI, + [anon_sym_type] = anon_sym_type, + [anon_sym_enum] = anon_sym_enum, + [anon_sym_struct] = anon_sym_struct, + [anon_sym_val] = anon_sym_val, + [anon_sym_var] = anon_sym_var, + [anon_sym_DASH_DASH_DASH] = anon_sym_DASH_DASH_DASH, + [anon_sym_rust] = anon_sym_rust, + [anon_sym_python] = anon_sym_python, + [anon_sym_mod] = anon_sym_mod, + [anon_sym_use] = anon_sym_use, + [aux_sym_code_token1] = aux_sym_code_token1, + [anon_sym_fun] = anon_sym_fun, + [anon_sym_AMP] = anon_sym_AMP, + [sym_type_never] = sym_type_never, + [anon_sym__] = anon_sym__, + [anon_sym_or] = anon_sym_or, + [anon_sym_return] = anon_sym_return, + [anon_sym_break] = anon_sym_break, + [anon_sym_continue] = anon_sym_continue, + [anon_sym_throw] = anon_sym_throw, + [anon_sym_from] = anon_sym_from, + [anon_sym_in] = anon_sym_in, + [anon_sym_where] = anon_sym_where, + [anon_sym_join] = anon_sym_join, + [anon_sym_on] = anon_sym_on, + [anon_sym_union] = anon_sym_union, + [anon_sym_group] = anon_sym_group, + [anon_sym_over] = anon_sym_over, + [anon_sym_roll] = anon_sym_roll, + [anon_sym_compute] = anon_sym_compute, + [anon_sym_select] = anon_sym_select, + [anon_sym_with] = anon_sym_with, + [anon_sym_into] = anon_sym_into, + [anon_sym_order] = anon_sym_order, + [anon_sym_desc] = anon_sym_desc, + [anon_sym_as] = anon_sym_as, + [anon_sym_of] = anon_sym_of, + [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, + [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, + [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, + [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, + [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, + [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, + [anon_sym_and] = anon_sym_and, + [anon_sym_EQ_EQ] = anon_sym_EQ_EQ, + [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, + [anon_sym_LT] = anon_sym_LT, + [anon_sym_GT] = anon_sym_GT, + [anon_sym_LT_EQ] = anon_sym_LT_EQ, + [anon_sym_GT_EQ] = anon_sym_GT_EQ, + [anon_sym_PLUS] = anon_sym_PLUS, + [anon_sym_DASH] = anon_sym_DASH, + [anon_sym_STAR] = anon_sym_STAR, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_not] = anon_sym_not, + [anon_sym_COLON_COLON] = anon_sym_COLON_COLON, + [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_do] = anon_sym_do, + [anon_sym_if] = anon_sym_if, + [anon_sym_else] = anon_sym_else, + [anon_sym_match] = anon_sym_match, + [anon_sym_loop] = anon_sym_loop, + [anon_sym_while] = anon_sym_while, + [anon_sym_for] = anon_sym_for, + [anon_sym_try] = anon_sym_try, + [anon_sym_catch] = anon_sym_catch, + [anon_sym_finally] = anon_sym_finally, + [anon_sym_EQ_GT] = anon_sym_EQ_GT, + [sym_program] = sym_program, + [sym_meta] = sym_meta, + [sym__attributes] = sym__attributes, + [sym_attribute] = sym_attribute, + [sym__constant] = sym__constant, + [sym_constant_string] = sym_constant_string, + [sym_string_interpolation] = sym_string_interpolation, + [sym_constant_char] = sym_constant_char, + [sym_constant_bool] = sym_constant_bool, + [sym_constant_unit] = sym_constant_unit, + [aux_sym__stmts] = aux_sym__stmts, + [sym__stmt] = sym__stmt, + [sym_stmt_def] = sym_stmt_def, + [sym_stmt_type] = sym_stmt_type, + [sym_stmt_enum] = sym_stmt_enum, + [sym_variant] = sym_variant, + [sym_stmt_struct] = sym_stmt_struct, + [sym_stmt_val] = sym_stmt_val, + [sym_stmt_var] = sym_stmt_var, + [sym_stmt_expr] = sym_stmt_expr, + [sym_stmt_code] = sym_stmt_code, + [sym_stmt_mod] = sym_stmt_mod, + [sym_stmt_use] = sym_stmt_use, + [sym_code] = sym_code, + [sym__stmt_noop] = sym__stmt_noop, + [sym__types] = sym__types, + [sym__type] = sym__type, + [sym_type_fun] = sym_type_fun, + [sym_type_record_concat] = sym_type_record_concat, + [sym_type_paren] = sym_type_paren, + [sym_type_nominal] = sym_type_nominal, + [sym_type_name] = sym_type_name, + [sym_type_tuple] = sym_type_tuple, + [sym_type_record] = sym_type_record, + [sym_type_array] = sym_type_array, + [sym_type_unit] = sym_type_unit, + [sym_type_wild] = sym_type_wild, + [sym__type_fields] = sym__type_fields, + [sym_type_field] = sym_type_field, + [sym_generic] = sym_generic, + [sym__generics] = sym__generics, + [sym__params] = sym__params, + [sym__param] = sym__param, + [sym__patterns] = sym__patterns, + [sym__pattern_fields] = sym__pattern_fields, + [sym_pattern_field] = sym_pattern_field, + [sym__pattern] = sym__pattern, + [sym_pattern_annot] = sym_pattern_annot, + [sym_pattern_or] = sym_pattern_or, + [sym_pattern_record_concat] = sym_pattern_record_concat, + [sym_pattern_paren] = sym_pattern_paren, + [sym_pattern_constant] = sym_pattern_constant, + [sym_pattern_name] = sym_pattern_name, + [sym_pattern_variant] = sym_pattern_variant, + [sym_pattern_tuple] = sym_pattern_tuple, + [sym_pattern_record] = sym_pattern_record, + [sym_pattern_array] = sym_pattern_array, + [sym_pattern_wild] = sym_pattern_wild, + [sym_variant_name] = sym_variant_name, + [sym__exprs] = sym__exprs, + [sym__expr] = sym__expr, + [sym_expr_return] = sym_expr_return, + [sym_expr_break] = sym_expr_break, + [sym_expr_continue] = sym_expr_continue, + [sym_expr_throw] = sym_expr_throw, + [sym_expr_query] = sym_expr_query, + [aux_sym__query_stmts] = aux_sym__query_stmts, + [sym__query_stmt] = sym__query_stmt, + [sym_query_from] = sym_query_from, + [sym_query_where] = sym_query_where, + [sym_query_join] = sym_query_join, + [sym_query_union] = sym_query_union, + [sym_query_group] = sym_query_group, + [sym_query_over] = sym_query_over, + [sym_query_roll] = sym_query_roll, + [sym_query_compute] = sym_query_compute, + [sym_query_select] = sym_query_select, + [sym_query_val] = sym_query_val, + [sym_query_into] = sym_query_into, + [sym_query_order] = sym_query_order, + [sym__as] = sym__as, + [sym__of] = sym__of, + [sym_expr_fun] = sym_expr_fun, + [sym_expr_binary] = sym_expr_binary, + [sym_expr_annot] = sym_expr_annot, + [sym_expr_call] = sym_expr_call, + [sym_expr_tuple_access] = sym_expr_tuple_access, + [sym_expr_record_access] = sym_expr_record_access, + [sym_expr_array_access] = sym_expr_array_access, + [sym_expr_method_call] = sym_expr_method_call, + [sym_expr_record_variant] = sym_expr_record_variant, + [sym_expr_paren] = sym_expr_paren, + [sym_expr_constant] = sym_expr_constant, + [sym_expr_name] = sym_expr_name, + [sym_expr_array] = sym_expr_array, + [sym_expr_tuple] = sym_expr_tuple, + [sym_expr_record] = sym_expr_record, + [sym__expr_fields] = sym__expr_fields, + [sym_expr_field] = sym_expr_field, + [sym_expr_field_expr] = sym_expr_field_expr, + [sym_expr_field_name] = sym_expr_field_name, + [sym_expr_do] = sym_expr_do, + [sym_expr_if] = sym_expr_if, + [sym_expr_match] = sym_expr_match, + [sym_expr_loop] = sym_expr_loop, + [sym_expr_while] = sym_expr_while, + [sym_expr_for] = sym_expr_for, + [sym_expr_try] = sym_expr_try, + [sym_block] = sym_block, + [sym__arms] = sym__arms, + [sym_arm] = sym_arm, + [aux_sym__attributes_repeat1] = aux_sym__attributes_repeat1, + [aux_sym_constant_string_repeat1] = aux_sym_constant_string_repeat1, + [aux_sym_stmt_enum_repeat1] = aux_sym_stmt_enum_repeat1, + [aux_sym_code_repeat1] = aux_sym_code_repeat1, + [aux_sym__types_repeat1] = aux_sym__types_repeat1, + [aux_sym__type_fields_repeat1] = aux_sym__type_fields_repeat1, + [aux_sym__generics_repeat1] = aux_sym__generics_repeat1, + [aux_sym__params_repeat1] = aux_sym__params_repeat1, + [aux_sym__patterns_repeat1] = aux_sym__patterns_repeat1, + [aux_sym__pattern_fields_repeat1] = aux_sym__pattern_fields_repeat1, + [aux_sym__exprs_repeat1] = aux_sym__exprs_repeat1, + [aux_sym__expr_fields_repeat1] = aux_sym__expr_fields_repeat1, + [aux_sym__arms_repeat1] = aux_sym__arms_repeat1, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_name] = { + .visible = true, + .named = true, + }, + [sym__whitespace] = { + .visible = false, + .named = true, + }, + [sym_line_comment] = { + .visible = true, + .named = true, + }, + [sym_index] = { + .visible = true, + .named = true, + }, + [anon_sym_AT] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [sym_constant_int] = { + .visible = true, + .named = true, + }, + [sym_constant_float] = { + .visible = true, + .named = true, + }, + [sym_string_quote] = { + .visible = true, + .named = true, + }, + [sym_string_content] = { + .visible = true, + .named = true, + }, + [anon_sym_DOLLAR] = { + .visible = true, + .named = false, + }, + [anon_sym_SQUOTE] = { + .visible = true, + .named = false, + }, + [aux_sym_constant_char_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_true] = { + .visible = true, + .named = false, + }, + [anon_sym_false] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_def] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, + [anon_sym_type] = { + .visible = true, + .named = false, + }, + [anon_sym_enum] = { + .visible = true, + .named = false, + }, + [anon_sym_struct] = { + .visible = true, + .named = false, + }, + [anon_sym_val] = { + .visible = true, + .named = false, + }, + [anon_sym_var] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_DASH_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_rust] = { + .visible = true, + .named = false, + }, + [anon_sym_python] = { + .visible = true, + .named = false, + }, + [anon_sym_mod] = { + .visible = true, + .named = false, + }, + [anon_sym_use] = { + .visible = true, + .named = false, + }, + [aux_sym_code_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_fun] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [sym_type_never] = { + .visible = true, + .named = true, + }, + [anon_sym__] = { + .visible = true, + .named = false, + }, + [anon_sym_or] = { + .visible = true, + .named = false, + }, + [anon_sym_return] = { + .visible = true, + .named = false, + }, + [anon_sym_break] = { + .visible = true, + .named = false, + }, + [anon_sym_continue] = { + .visible = true, + .named = false, + }, + [anon_sym_throw] = { + .visible = true, + .named = false, + }, + [anon_sym_from] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_where] = { + .visible = true, + .named = false, + }, + [anon_sym_join] = { + .visible = true, + .named = false, + }, + [anon_sym_on] = { + .visible = true, + .named = false, + }, + [anon_sym_union] = { + .visible = true, + .named = false, + }, + [anon_sym_group] = { + .visible = true, + .named = false, + }, + [anon_sym_over] = { + .visible = true, + .named = false, + }, + [anon_sym_roll] = { + .visible = true, + .named = false, + }, + [anon_sym_compute] = { + .visible = true, + .named = false, + }, + [anon_sym_select] = { + .visible = true, + .named = false, + }, + [anon_sym_with] = { + .visible = true, + .named = false, + }, + [anon_sym_into] = { + .visible = true, + .named = false, + }, + [anon_sym_order] = { + .visible = true, + .named = false, + }, + [anon_sym_desc] = { + .visible = true, + .named = false, + }, + [anon_sym_as] = { + .visible = true, + .named = false, + }, + [anon_sym_of] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_and] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_not] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_do] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_match] = { + .visible = true, + .named = false, + }, + [anon_sym_loop] = { + .visible = true, + .named = false, + }, + [anon_sym_while] = { + .visible = true, + .named = false, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_try] = { + .visible = true, + .named = false, + }, + [anon_sym_catch] = { + .visible = true, + .named = false, + }, + [anon_sym_finally] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_GT] = { + .visible = true, + .named = false, + }, + [sym_program] = { + .visible = true, + .named = true, + }, + [sym_meta] = { + .visible = true, + .named = true, + }, + [sym__attributes] = { + .visible = false, + .named = true, + }, + [sym_attribute] = { + .visible = true, + .named = true, + }, + [sym__constant] = { + .visible = false, + .named = true, + }, + [sym_constant_string] = { + .visible = true, + .named = true, + }, + [sym_string_interpolation] = { + .visible = true, + .named = true, + }, + [sym_constant_char] = { + .visible = true, + .named = true, + }, + [sym_constant_bool] = { + .visible = true, + .named = true, + }, + [sym_constant_unit] = { + .visible = true, + .named = true, + }, + [aux_sym__stmts] = { + .visible = false, + .named = false, + }, + [sym__stmt] = { + .visible = false, + .named = true, + }, + [sym_stmt_def] = { + .visible = true, + .named = true, + }, + [sym_stmt_type] = { + .visible = true, + .named = true, + }, + [sym_stmt_enum] = { + .visible = true, + .named = true, + }, + [sym_variant] = { + .visible = true, + .named = true, + }, + [sym_stmt_struct] = { + .visible = true, + .named = true, + }, + [sym_stmt_val] = { + .visible = true, + .named = true, + }, + [sym_stmt_var] = { + .visible = true, + .named = true, + }, + [sym_stmt_expr] = { + .visible = true, + .named = true, + }, + [sym_stmt_code] = { + .visible = true, + .named = true, + }, + [sym_stmt_mod] = { + .visible = true, + .named = true, + }, + [sym_stmt_use] = { + .visible = true, + .named = true, + }, + [sym_code] = { + .visible = true, + .named = true, + }, + [sym__stmt_noop] = { + .visible = false, + .named = true, + }, + [sym__types] = { + .visible = false, + .named = true, + }, + [sym__type] = { + .visible = false, + .named = true, + }, + [sym_type_fun] = { + .visible = true, + .named = true, + }, + [sym_type_record_concat] = { + .visible = true, + .named = true, + }, + [sym_type_paren] = { + .visible = true, + .named = true, + }, + [sym_type_nominal] = { + .visible = true, + .named = true, + }, + [sym_type_name] = { + .visible = true, + .named = true, + }, + [sym_type_tuple] = { + .visible = true, + .named = true, + }, + [sym_type_record] = { + .visible = true, + .named = true, + }, + [sym_type_array] = { + .visible = true, + .named = true, + }, + [sym_type_unit] = { + .visible = true, + .named = true, + }, + [sym_type_wild] = { + .visible = true, + .named = true, + }, + [sym__type_fields] = { + .visible = false, + .named = true, + }, + [sym_type_field] = { + .visible = true, + .named = true, + }, + [sym_generic] = { + .visible = true, + .named = true, + }, + [sym__generics] = { + .visible = false, + .named = true, + }, + [sym__params] = { + .visible = false, + .named = true, + }, + [sym__param] = { + .visible = false, + .named = true, + }, + [sym__patterns] = { + .visible = false, + .named = true, + }, + [sym__pattern_fields] = { + .visible = false, + .named = true, + }, + [sym_pattern_field] = { + .visible = true, + .named = true, + }, + [sym__pattern] = { + .visible = false, + .named = true, + }, + [sym_pattern_annot] = { + .visible = true, + .named = true, + }, + [sym_pattern_or] = { + .visible = true, + .named = true, + }, + [sym_pattern_record_concat] = { + .visible = true, + .named = true, + }, + [sym_pattern_paren] = { + .visible = true, + .named = true, + }, + [sym_pattern_constant] = { + .visible = true, + .named = true, + }, + [sym_pattern_name] = { + .visible = true, + .named = true, + }, + [sym_pattern_variant] = { + .visible = true, + .named = true, + }, + [sym_pattern_tuple] = { + .visible = true, + .named = true, + }, + [sym_pattern_record] = { + .visible = true, + .named = true, + }, + [sym_pattern_array] = { + .visible = true, + .named = true, + }, + [sym_pattern_wild] = { + .visible = true, + .named = true, + }, + [sym_variant_name] = { + .visible = true, + .named = true, + }, + [sym__exprs] = { + .visible = false, + .named = true, + }, + [sym__expr] = { + .visible = false, + .named = true, + }, + [sym_expr_return] = { + .visible = true, + .named = true, + }, + [sym_expr_break] = { + .visible = true, + .named = true, + }, + [sym_expr_continue] = { + .visible = true, + .named = true, + }, + [sym_expr_throw] = { + .visible = true, + .named = true, + }, + [sym_expr_query] = { + .visible = true, + .named = true, + }, + [aux_sym__query_stmts] = { + .visible = false, + .named = false, + }, + [sym__query_stmt] = { + .visible = false, + .named = true, + }, + [sym_query_from] = { + .visible = true, + .named = true, + }, + [sym_query_where] = { + .visible = true, + .named = true, + }, + [sym_query_join] = { + .visible = true, + .named = true, + }, + [sym_query_union] = { + .visible = true, + .named = true, + }, + [sym_query_group] = { + .visible = true, + .named = true, + }, + [sym_query_over] = { + .visible = true, + .named = true, + }, + [sym_query_roll] = { + .visible = true, + .named = true, + }, + [sym_query_compute] = { + .visible = true, + .named = true, + }, + [sym_query_select] = { + .visible = true, + .named = true, + }, + [sym_query_val] = { + .visible = true, + .named = true, + }, + [sym_query_into] = { + .visible = true, + .named = true, + }, + [sym_query_order] = { + .visible = true, + .named = true, + }, + [sym__as] = { + .visible = false, + .named = true, + }, + [sym__of] = { + .visible = false, + .named = true, + }, + [sym_expr_fun] = { + .visible = true, + .named = true, + }, + [sym_expr_binary] = { + .visible = true, + .named = true, + }, + [sym_expr_annot] = { + .visible = true, + .named = true, + }, + [sym_expr_call] = { + .visible = true, + .named = true, + }, + [sym_expr_tuple_access] = { + .visible = true, + .named = true, + }, + [sym_expr_record_access] = { + .visible = true, + .named = true, + }, + [sym_expr_array_access] = { + .visible = true, + .named = true, + }, + [sym_expr_method_call] = { + .visible = true, + .named = true, + }, + [sym_expr_record_variant] = { + .visible = true, + .named = true, + }, + [sym_expr_paren] = { + .visible = true, + .named = true, + }, + [sym_expr_constant] = { + .visible = true, + .named = true, + }, + [sym_expr_name] = { + .visible = true, + .named = true, + }, + [sym_expr_array] = { + .visible = true, + .named = true, + }, + [sym_expr_tuple] = { + .visible = true, + .named = true, + }, + [sym_expr_record] = { + .visible = true, + .named = true, + }, + [sym__expr_fields] = { + .visible = false, + .named = true, + }, + [sym_expr_field] = { + .visible = true, + .named = true, + }, + [sym_expr_field_expr] = { + .visible = true, + .named = true, + }, + [sym_expr_field_name] = { + .visible = true, + .named = true, + }, + [sym_expr_do] = { + .visible = true, + .named = true, + }, + [sym_expr_if] = { + .visible = true, + .named = true, + }, + [sym_expr_match] = { + .visible = true, + .named = true, + }, + [sym_expr_loop] = { + .visible = true, + .named = true, + }, + [sym_expr_while] = { + .visible = true, + .named = true, + }, + [sym_expr_for] = { + .visible = true, + .named = true, + }, + [sym_expr_try] = { + .visible = true, + .named = true, + }, + [sym_block] = { + .visible = true, + .named = true, + }, + [sym__arms] = { + .visible = false, + .named = true, + }, + [sym_arm] = { + .visible = true, + .named = true, + }, + [aux_sym__attributes_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_constant_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_stmt_enum_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_code_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__types_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__type_fields_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__generics_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__params_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__patterns_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__pattern_fields_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__exprs_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__expr_fields_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__arms_repeat1] = { + .visible = false, + .named = false, + }, +}; + +enum { + field_arm = 1, + field_code = 2, + field_function = 3, + field_inner = 4, + field_lang = 5, + field_name = 6, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_arm] = "arm", + [field_code] = "code", + [field_function] = "function", + [field_inner] = "inner", + [field_lang] = "lang", + [field_name] = "name", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [1] = {.index = 0, .length = 1}, + [2] = {.index = 1, .length = 1}, + [3] = {.index = 2, .length = 3}, + [4] = {.index = 5, .length = 2}, + [5] = {.index = 7, .length = 4}, + [6] = {.index = 11, .length = 3}, + [7] = {.index = 14, .length = 1}, + [8] = {.index = 15, .length = 5}, + [9] = {.index = 20, .length = 3}, + [10] = {.index = 23, .length = 4}, + [11] = {.index = 27, .length = 6}, + [12] = {.index = 33, .length = 5}, + [13] = {.index = 38, .length = 7}, + [14] = {.index = 45, .length = 6}, + [15] = {.index = 51, .length = 8}, + [16] = {.index = 59, .length = 7}, + [17] = {.index = 66, .length = 9}, + [18] = {.index = 75, .length = 8}, + [19] = {.index = 83, .length = 10}, + [20] = {.index = 93, .length = 9}, + [21] = {.index = 102, .length = 11}, + [22] = {.index = 113, .length = 10}, + [23] = {.index = 123, .length = 12}, + [24] = {.index = 135, .length = 11}, + [25] = {.index = 146, .length = 12}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_lang, 1}, + [1] = + {field_function, 0}, + [2] = + {field_inner, 2}, + {field_inner, 3}, + {field_name, 1}, + [5] = + {field_code, 2}, + {field_lang, 1}, + [7] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_name, 1}, + [11] = + {field_inner, 3}, + {field_inner, 4}, + {field_name, 2}, + [14] = + {field_name, 2}, + [15] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_name, 1}, + [20] = + {field_arm, 0}, + {field_arm, 1}, + {field_arm, 2}, + [23] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_name, 2}, + [27] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_name, 1}, + [33] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_name, 2}, + [38] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_name, 1}, + [45] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_name, 2}, + [51] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_name, 1}, + [59] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_name, 2}, + [66] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_name, 1}, + [75] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_name, 2}, + [83] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_name, 1}, + [93] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_name, 2}, + [102] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_inner, 11}, + {field_name, 1}, + [113] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_inner, 11}, + {field_name, 2}, + [123] = + {field_inner, 2}, + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_inner, 11}, + {field_inner, 12}, + {field_name, 1}, + [135] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_inner, 11}, + {field_inner, 12}, + {field_name, 2}, + [146] = + {field_inner, 3}, + {field_inner, 4}, + {field_inner, 5}, + {field_inner, 6}, + {field_inner, 7}, + {field_inner, 8}, + {field_inner, 9}, + {field_inner, 10}, + {field_inner, 11}, + {field_inner, 12}, + {field_inner, 13}, + {field_name, 2}, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 3, + [4] = 2, + [5] = 2, + [6] = 3, + [7] = 3, + [8] = 2, + [9] = 3, + [10] = 3, + [11] = 2, + [12] = 2, + [13] = 3, + [14] = 3, + [15] = 2, + [16] = 2, + [17] = 3, + [18] = 2, + [19] = 3, + [20] = 3, + [21] = 3, + [22] = 2, + [23] = 2, + [24] = 2, + [25] = 3, + [26] = 3, + [27] = 2, + [28] = 28, + [29] = 29, + [30] = 30, + [31] = 31, + [32] = 29, + [33] = 29, + [34] = 31, + [35] = 35, + [36] = 36, + [37] = 29, + [38] = 31, + [39] = 31, + [40] = 2, + [41] = 3, + [42] = 2, + [43] = 3, + [44] = 44, + [45] = 45, + [46] = 45, + [47] = 44, + [48] = 48, + [49] = 49, + [50] = 50, + [51] = 51, + [52] = 52, + [53] = 53, + [54] = 54, + [55] = 51, + [56] = 56, + [57] = 57, + [58] = 58, + [59] = 59, + [60] = 58, + [61] = 61, + [62] = 56, + [63] = 57, + [64] = 53, + [65] = 65, + [66] = 59, + [67] = 67, + [68] = 68, + [69] = 52, + [70] = 52, + [71] = 67, + [72] = 68, + [73] = 54, + [74] = 54, + [75] = 67, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 79, + [80] = 80, + [81] = 81, + [82] = 77, + [83] = 76, + [84] = 84, + [85] = 85, + [86] = 86, + [87] = 84, + [88] = 88, + [89] = 88, + [90] = 84, + [91] = 91, + [92] = 79, + [93] = 93, + [94] = 94, + [95] = 95, + [96] = 96, + [97] = 78, + [98] = 98, + [99] = 99, + [100] = 100, + [101] = 101, + [102] = 102, + [103] = 103, + [104] = 84, + [105] = 88, + [106] = 76, + [107] = 107, + [108] = 77, + [109] = 81, + [110] = 80, + [111] = 79, + [112] = 78, + [113] = 84, + [114] = 107, + [115] = 115, + [116] = 88, + [117] = 88, + [118] = 118, + [119] = 103, + [120] = 102, + [121] = 101, + [122] = 100, + [123] = 99, + [124] = 124, + [125] = 98, + [126] = 96, + [127] = 127, + [128] = 88, + [129] = 79, + [130] = 78, + [131] = 79, + [132] = 115, + [133] = 107, + [134] = 134, + [135] = 118, + [136] = 103, + [137] = 102, + [138] = 101, + [139] = 100, + [140] = 99, + [141] = 98, + [142] = 96, + [143] = 127, + [144] = 115, + [145] = 88, + [146] = 67, + [147] = 78, + [148] = 52, + [149] = 107, + [150] = 118, + [151] = 103, + [152] = 152, + [153] = 102, + [154] = 101, + [155] = 100, + [156] = 99, + [157] = 157, + [158] = 98, + [159] = 96, + [160] = 127, + [161] = 93, + [162] = 77, + [163] = 76, + [164] = 93, + [165] = 67, + [166] = 134, + [167] = 85, + [168] = 168, + [169] = 107, + [170] = 127, + [171] = 171, + [172] = 172, + [173] = 96, + [174] = 52, + [175] = 107, + [176] = 118, + [177] = 103, + [178] = 102, + [179] = 101, + [180] = 100, + [181] = 99, + [182] = 98, + [183] = 96, + [184] = 127, + [185] = 127, + [186] = 96, + [187] = 98, + [188] = 98, + [189] = 99, + [190] = 100, + [191] = 101, + [192] = 102, + [193] = 103, + [194] = 171, + [195] = 95, + [196] = 118, + [197] = 197, + [198] = 198, + [199] = 118, + [200] = 76, + [201] = 99, + [202] = 100, + [203] = 77, + [204] = 79, + [205] = 115, + [206] = 206, + [207] = 93, + [208] = 78, + [209] = 209, + [210] = 79, + [211] = 54, + [212] = 134, + [213] = 78, + [214] = 79, + [215] = 54, + [216] = 88, + [217] = 84, + [218] = 101, + [219] = 78, + [220] = 79, + [221] = 107, + [222] = 134, + [223] = 102, + [224] = 88, + [225] = 168, + [226] = 85, + [227] = 93, + [228] = 115, + [229] = 77, + [230] = 84, + [231] = 103, + [232] = 76, + [233] = 78, + [234] = 107, + [235] = 79, + [236] = 118, + [237] = 118, + [238] = 103, + [239] = 85, + [240] = 102, + [241] = 107, + [242] = 242, + [243] = 88, + [244] = 84, + [245] = 103, + [246] = 102, + [247] = 101, + [248] = 100, + [249] = 78, + [250] = 79, + [251] = 99, + [252] = 98, + [253] = 84, + [254] = 78, + [255] = 101, + [256] = 256, + [257] = 96, + [258] = 258, + [259] = 100, + [260] = 168, + [261] = 168, + [262] = 99, + [263] = 127, + [264] = 127, + [265] = 77, + [266] = 115, + [267] = 267, + [268] = 88, + [269] = 96, + [270] = 93, + [271] = 85, + [272] = 86, + [273] = 98, + [274] = 134, + [275] = 86, + [276] = 85, + [277] = 168, + [278] = 168, + [279] = 99, + [280] = 93, + [281] = 134, + [282] = 85, + [283] = 283, + [284] = 134, + [285] = 88, + [286] = 115, + [287] = 84, + [288] = 78, + [289] = 79, + [290] = 77, + [291] = 93, + [292] = 76, + [293] = 115, + [294] = 168, + [295] = 100, + [296] = 101, + [297] = 197, + [298] = 102, + [299] = 172, + [300] = 198, + [301] = 84, + [302] = 134, + [303] = 103, + [304] = 76, + [305] = 118, + [306] = 127, + [307] = 86, + [308] = 134, + [309] = 98, + [310] = 85, + [311] = 311, + [312] = 85, + [313] = 85, + [314] = 93, + [315] = 107, + [316] = 118, + [317] = 103, + [318] = 102, + [319] = 101, + [320] = 107, + [321] = 100, + [322] = 99, + [323] = 98, + [324] = 96, + [325] = 168, + [326] = 127, + [327] = 134, + [328] = 85, + [329] = 93, + [330] = 115, + [331] = 331, + [332] = 76, + [333] = 77, + [334] = 107, + [335] = 76, + [336] = 168, + [337] = 118, + [338] = 127, + [339] = 107, + [340] = 88, + [341] = 118, + [342] = 115, + [343] = 127, + [344] = 96, + [345] = 103, + [346] = 102, + [347] = 101, + [348] = 100, + [349] = 99, + [350] = 98, + [351] = 96, + [352] = 103, + [353] = 102, + [354] = 101, + [355] = 127, + [356] = 100, + [357] = 77, + [358] = 79, + [359] = 99, + [360] = 98, + [361] = 96, + [362] = 99, + [363] = 98, + [364] = 99, + [365] = 118, + [366] = 100, + [367] = 100, + [368] = 101, + [369] = 369, + [370] = 101, + [371] = 102, + [372] = 98, + [373] = 102, + [374] = 96, + [375] = 127, + [376] = 78, + [377] = 168, + [378] = 103, + [379] = 107, + [380] = 103, + [381] = 118, + [382] = 168, + [383] = 96, + [384] = 107, + [385] = 85, + [386] = 134, + [387] = 76, + [388] = 77, + [389] = 115, + [390] = 93, + [391] = 85, + [392] = 168, + [393] = 84, + [394] = 84, + [395] = 127, + [396] = 93, + [397] = 115, + [398] = 118, + [399] = 76, + [400] = 134, + [401] = 77, + [402] = 67, + [403] = 67, + [404] = 54, + [405] = 52, + [406] = 52, + [407] = 67, + [408] = 52, + [409] = 54, + [410] = 67, + [411] = 54, + [412] = 52, + [413] = 54, + [414] = 67, + [415] = 52, + [416] = 67, + [417] = 67, + [418] = 52, + [419] = 54, + [420] = 52, + [421] = 67, + [422] = 52, + [423] = 54, + [424] = 54, + [425] = 67, + [426] = 52, + [427] = 67, + [428] = 52, + [429] = 429, + [430] = 430, + [431] = 431, + [432] = 432, + [433] = 433, + [434] = 434, + [435] = 435, + [436] = 436, + [437] = 437, + [438] = 438, + [439] = 439, + [440] = 440, + [441] = 441, + [442] = 442, + [443] = 443, + [444] = 430, + [445] = 445, + [446] = 446, + [447] = 445, + [448] = 448, + [449] = 445, + [450] = 430, + [451] = 451, + [452] = 452, + [453] = 453, + [454] = 454, + [455] = 455, + [456] = 456, + [457] = 457, + [458] = 458, + [459] = 459, + [460] = 460, + [461] = 461, + [462] = 445, + [463] = 430, + [464] = 464, + [465] = 465, + [466] = 430, + [467] = 467, + [468] = 468, + [469] = 469, + [470] = 470, + [471] = 471, + [472] = 472, + [473] = 473, + [474] = 474, + [475] = 475, + [476] = 476, + [477] = 477, + [478] = 478, + [479] = 439, + [480] = 480, + [481] = 460, + [482] = 482, + [483] = 483, + [484] = 484, + [485] = 485, + [486] = 486, + [487] = 487, + [488] = 488, + [489] = 440, + [490] = 490, + [491] = 491, + [492] = 448, + [493] = 493, + [494] = 445, + [495] = 495, + [496] = 496, + [497] = 497, + [498] = 498, + [499] = 499, + [500] = 500, + [501] = 501, + [502] = 502, + [503] = 503, + [504] = 430, + [505] = 445, + [506] = 506, + [507] = 507, + [508] = 508, + [509] = 509, + [510] = 510, + [511] = 511, + [512] = 512, + [513] = 513, + [514] = 514, + [515] = 515, + [516] = 516, + [517] = 435, + [518] = 518, + [519] = 519, + [520] = 520, + [521] = 434, + [522] = 522, + [523] = 454, + [524] = 524, + [525] = 525, + [526] = 526, + [527] = 522, + [528] = 528, + [529] = 529, + [530] = 530, + [531] = 531, + [532] = 522, + [533] = 533, + [534] = 534, + [535] = 535, + [536] = 536, + [537] = 537, + [538] = 538, + [539] = 530, + [540] = 540, + [541] = 541, + [542] = 522, + [543] = 543, + [544] = 544, + [545] = 545, + [546] = 546, + [547] = 547, + [548] = 548, + [549] = 549, + [550] = 528, + [551] = 537, + [552] = 541, + [553] = 545, + [554] = 546, + [555] = 547, + [556] = 529, + [557] = 548, + [558] = 549, + [559] = 528, + [560] = 531, + [561] = 547, + [562] = 529, + [563] = 546, + [564] = 545, + [565] = 530, + [566] = 522, + [567] = 541, + [568] = 537, + [569] = 536, + [570] = 533, + [571] = 530, + [572] = 534, + [573] = 522, + [574] = 548, + [575] = 535, + [576] = 531, + [577] = 536, + [578] = 549, + [579] = 538, + [580] = 540, + [581] = 543, + [582] = 544, + [583] = 544, + [584] = 543, + [585] = 538, + [586] = 540, + [587] = 533, + [588] = 534, + [589] = 535, + [590] = 543, + [591] = 543, + [592] = 544, + [593] = 531, + [594] = 529, + [595] = 540, + [596] = 528, + [597] = 538, + [598] = 536, + [599] = 535, + [600] = 534, + [601] = 533, + [602] = 547, + [603] = 546, + [604] = 549, + [605] = 545, + [606] = 541, + [607] = 548, + [608] = 537, + [609] = 530, + [610] = 544, + [611] = 531, + [612] = 540, + [613] = 528, + [614] = 549, + [615] = 538, + [616] = 536, + [617] = 547, + [618] = 548, + [619] = 546, + [620] = 545, + [621] = 541, + [622] = 535, + [623] = 534, + [624] = 537, + [625] = 533, + [626] = 530, + [627] = 531, + [628] = 445, + [629] = 548, + [630] = 545, + [631] = 541, + [632] = 537, + [633] = 533, + [634] = 534, + [635] = 535, + [636] = 536, + [637] = 538, + [638] = 540, + [639] = 543, + [640] = 544, + [641] = 546, + [642] = 547, + [643] = 430, + [644] = 528, + [645] = 549, + [646] = 430, + [647] = 445, + [648] = 430, + [649] = 445, + [650] = 430, + [651] = 430, + [652] = 430, + [653] = 445, + [654] = 445, + [655] = 445, + [656] = 430, + [657] = 522, + [658] = 445, + [659] = 534, + [660] = 547, + [661] = 522, + [662] = 537, + [663] = 530, + [664] = 530, + [665] = 529, + [666] = 522, + [667] = 522, + [668] = 538, + [669] = 548, + [670] = 531, + [671] = 544, + [672] = 543, + [673] = 546, + [674] = 541, + [675] = 540, + [676] = 549, + [677] = 536, + [678] = 535, + [679] = 528, + [680] = 473, + [681] = 545, + [682] = 533, + [683] = 530, + [684] = 538, + [685] = 522, + [686] = 537, + [687] = 537, + [688] = 541, + [689] = 545, + [690] = 541, + [691] = 529, + [692] = 530, + [693] = 545, + [694] = 529, + [695] = 533, + [696] = 533, + [697] = 534, + [698] = 535, + [699] = 536, + [700] = 538, + [701] = 540, + [702] = 543, + [703] = 522, + [704] = 531, + [705] = 544, + [706] = 547, + [707] = 536, + [708] = 535, + [709] = 548, + [710] = 546, + [711] = 522, + [712] = 544, + [713] = 549, + [714] = 528, + [715] = 543, + [716] = 534, + [717] = 546, + [718] = 547, + [719] = 548, + [720] = 549, + [721] = 528, + [722] = 540, + [723] = 531, + [724] = 528, + [725] = 549, + [726] = 530, + [727] = 541, + [728] = 529, + [729] = 530, + [730] = 537, + [731] = 544, + [732] = 544, + [733] = 543, + [734] = 540, + [735] = 543, + [736] = 538, + [737] = 540, + [738] = 536, + [739] = 535, + [740] = 536, + [741] = 538, + [742] = 541, + [743] = 537, + [744] = 545, + [745] = 535, + [746] = 534, + [747] = 545, + [748] = 546, + [749] = 530, + [750] = 548, + [751] = 547, + [752] = 533, + [753] = 547, + [754] = 548, + [755] = 549, + [756] = 546, + [757] = 533, + [758] = 531, + [759] = 531, + [760] = 534, + [761] = 528, + [762] = 533, + [763] = 547, + [764] = 537, + [765] = 541, + [766] = 545, + [767] = 546, + [768] = 547, + [769] = 544, + [770] = 543, + [771] = 540, + [772] = 538, + [773] = 536, + [774] = 535, + [775] = 548, + [776] = 549, + [777] = 528, + [778] = 534, + [779] = 531, + [780] = 780, + [781] = 781, + [782] = 782, + [783] = 783, + [784] = 784, + [785] = 785, + [786] = 786, + [787] = 787, + [788] = 788, + [789] = 789, + [790] = 790, + [791] = 791, + [792] = 792, + [793] = 793, + [794] = 794, + [795] = 795, + [796] = 796, + [797] = 797, + [798] = 798, + [799] = 799, + [800] = 800, + [801] = 801, + [802] = 802, + [803] = 803, + [804] = 804, + [805] = 805, + [806] = 806, + [807] = 807, + [808] = 808, + [809] = 809, + [810] = 810, + [811] = 811, + [812] = 812, + [813] = 813, + [814] = 814, + [815] = 815, + [816] = 458, + [817] = 817, + [818] = 459, + [819] = 819, + [820] = 820, + [821] = 821, + [822] = 822, + [823] = 823, + [824] = 824, + [825] = 825, + [826] = 826, + [827] = 827, + [828] = 461, + [829] = 829, + [830] = 830, + [831] = 831, + [832] = 832, + [833] = 833, + [834] = 834, + [835] = 455, + [836] = 432, + [837] = 498, + [838] = 436, + [839] = 453, + [840] = 438, + [841] = 431, + [842] = 443, + [843] = 497, + [844] = 429, + [845] = 442, + [846] = 457, + [847] = 469, + [848] = 478, + [849] = 468, + [850] = 451, + [851] = 446, + [852] = 461, + [853] = 458, + [854] = 459, + [855] = 433, + [856] = 441, + [857] = 452, + [858] = 437, + [859] = 456, + [860] = 860, + [861] = 486, + [862] = 467, + [863] = 502, + [864] = 506, + [865] = 513, + [866] = 483, + [867] = 867, + [868] = 471, + [869] = 869, + [870] = 487, + [871] = 507, + [872] = 508, + [873] = 519, + [874] = 499, + [875] = 490, + [876] = 500, + [877] = 464, + [878] = 475, + [879] = 516, + [880] = 496, + [881] = 493, + [882] = 509, + [883] = 510, + [884] = 867, + [885] = 485, + [886] = 886, + [887] = 474, + [888] = 888, + [889] = 525, + [890] = 470, + [891] = 512, + [892] = 484, + [893] = 472, + [894] = 501, + [895] = 465, + [896] = 511, + [897] = 897, + [898] = 495, + [899] = 526, + [900] = 900, + [901] = 901, + [902] = 473, + [903] = 903, + [904] = 904, + [905] = 905, + [906] = 906, + [907] = 907, + [908] = 906, + [909] = 909, + [910] = 910, + [911] = 911, + [912] = 912, + [913] = 913, + [914] = 913, + [915] = 543, + [916] = 913, + [917] = 533, + [918] = 913, + [919] = 919, + [920] = 920, + [921] = 913, + [922] = 541, + [923] = 913, + [924] = 913, + [925] = 913, + [926] = 537, + [927] = 913, + [928] = 545, + [929] = 913, + [930] = 913, + [931] = 913, + [932] = 932, + [933] = 544, + [934] = 913, + [935] = 534, + [936] = 913, + [937] = 913, + [938] = 535, + [939] = 536, + [940] = 538, + [941] = 540, + [942] = 942, + [943] = 943, + [944] = 944, + [945] = 945, + [946] = 942, + [947] = 945, + [948] = 948, + [949] = 949, + [950] = 942, + [951] = 944, + [952] = 944, + [953] = 944, + [954] = 945, + [955] = 942, + [956] = 956, + [957] = 945, + [958] = 958, + [959] = 942, + [960] = 945, + [961] = 945, + [962] = 942, + [963] = 942, + [964] = 944, + [965] = 945, + [966] = 966, + [967] = 942, + [968] = 944, + [969] = 944, + [970] = 944, + [971] = 945, + [972] = 944, + [973] = 973, + [974] = 942, + [975] = 944, + [976] = 942, + [977] = 966, + [978] = 944, + [979] = 945, + [980] = 945, + [981] = 944, + [982] = 942, + [983] = 945, + [984] = 945, + [985] = 945, + [986] = 942, + [987] = 987, + [988] = 54, + [989] = 989, + [990] = 990, + [991] = 991, + [992] = 992, + [993] = 993, + [994] = 994, + [995] = 995, + [996] = 996, + [997] = 997, + [998] = 997, + [999] = 994, + [1000] = 992, + [1001] = 995, + [1002] = 991, + [1003] = 993, + [1004] = 989, + [1005] = 1005, + [1006] = 544, + [1007] = 1005, + [1008] = 1008, + [1009] = 1009, + [1010] = 1010, + [1011] = 1008, + [1012] = 1010, + [1013] = 538, + [1014] = 1009, + [1015] = 540, + [1016] = 543, + [1017] = 473, + [1018] = 536, + [1019] = 535, + [1020] = 534, + [1021] = 533, + [1022] = 1022, + [1023] = 1023, + [1024] = 1024, + [1025] = 1005, + [1026] = 1024, + [1027] = 1027, + [1028] = 545, + [1029] = 541, + [1030] = 537, + [1031] = 1024, + [1032] = 1027, + [1033] = 1005, + [1034] = 1034, + [1035] = 1024, + [1036] = 1036, + [1037] = 1037, + [1038] = 1038, + [1039] = 1039, + [1040] = 1037, + [1041] = 1041, + [1042] = 1042, + [1043] = 1043, + [1044] = 1044, + [1045] = 1044, + [1046] = 1044, + [1047] = 534, + [1048] = 544, + [1049] = 1044, + [1050] = 1050, + [1051] = 536, + [1052] = 1052, + [1053] = 1036, + [1054] = 1054, + [1055] = 533, + [1056] = 1044, + [1057] = 538, + [1058] = 537, + [1059] = 1044, + [1060] = 541, + [1061] = 1044, + [1062] = 1062, + [1063] = 1044, + [1064] = 1044, + [1065] = 1044, + [1066] = 545, + [1067] = 1067, + [1068] = 1062, + [1069] = 1069, + [1070] = 543, + [1071] = 1071, + [1072] = 1072, + [1073] = 1073, + [1074] = 1044, + [1075] = 540, + [1076] = 535, + [1077] = 1044, + [1078] = 1078, + [1079] = 1079, + [1080] = 1079, + [1081] = 1081, + [1082] = 1082, + [1083] = 1083, + [1084] = 1084, + [1085] = 1085, + [1086] = 1081, + [1087] = 1087, + [1088] = 1088, + [1089] = 1089, + [1090] = 1090, + [1091] = 1079, + [1092] = 1092, + [1093] = 1093, + [1094] = 1085, + [1095] = 1095, + [1096] = 1096, + [1097] = 1097, + [1098] = 1096, + [1099] = 1099, + [1100] = 1097, + [1101] = 1099, + [1102] = 1102, + [1103] = 1103, + [1104] = 1102, + [1105] = 1105, + [1106] = 1102, + [1107] = 1107, + [1108] = 1108, + [1109] = 1102, + [1110] = 1110, + [1111] = 1111, + [1112] = 1112, + [1113] = 1113, + [1114] = 1102, + [1115] = 1115, + [1116] = 1102, + [1117] = 1117, + [1118] = 1118, + [1119] = 1119, + [1120] = 1105, + [1121] = 1121, + [1122] = 1102, + [1123] = 1102, + [1124] = 1112, + [1125] = 1125, + [1126] = 1126, + [1127] = 1111, + [1128] = 1102, + [1129] = 1102, + [1130] = 1130, + [1131] = 1102, + [1132] = 1132, + [1133] = 1133, + [1134] = 1134, + [1135] = 1108, + [1136] = 1136, + [1137] = 1137, + [1138] = 1112, + [1139] = 1102, + [1140] = 1102, + [1141] = 1102, + [1142] = 1108, + [1143] = 1143, + [1144] = 1144, + [1145] = 1145, + [1146] = 1102, + [1147] = 1105, + [1148] = 433, + [1149] = 1149, + [1150] = 456, + [1151] = 452, + [1152] = 1152, + [1153] = 1153, + [1154] = 1154, + [1155] = 1155, + [1156] = 1156, + [1157] = 1157, + [1158] = 1158, + [1159] = 1159, + [1160] = 1160, + [1161] = 1161, + [1162] = 1162, + [1163] = 1163, + [1164] = 1164, + [1165] = 1165, + [1166] = 1166, + [1167] = 1167, + [1168] = 1168, + [1169] = 1169, + [1170] = 1170, + [1171] = 1169, + [1172] = 1170, + [1173] = 1173, + [1174] = 1174, + [1175] = 1175, + [1176] = 1176, + [1177] = 1177, + [1178] = 1178, + [1179] = 1179, + [1180] = 1179, + [1181] = 1179, + [1182] = 1182, + [1183] = 1183, + [1184] = 1183, + [1185] = 1185, + [1186] = 1186, + [1187] = 1179, + [1188] = 1186, + [1189] = 1189, + [1190] = 1186, + [1191] = 1179, + [1192] = 1192, + [1193] = 1183, + [1194] = 1194, + [1195] = 1194, + [1196] = 1186, + [1197] = 1179, + [1198] = 1194, + [1199] = 1183, + [1200] = 1186, + [1201] = 1179, + [1202] = 1192, + [1203] = 1203, + [1204] = 1194, + [1205] = 1179, + [1206] = 1183, + [1207] = 1192, + [1208] = 1208, + [1209] = 1209, + [1210] = 1194, + [1211] = 1211, + [1212] = 1192, + [1213] = 1192, + [1214] = 1182, + [1215] = 1186, + [1216] = 1179, + [1217] = 1186, + [1218] = 1194, + [1219] = 1186, + [1220] = 1183, + [1221] = 1179, + [1222] = 1192, + [1223] = 1223, + [1224] = 1194, + [1225] = 1183, + [1226] = 1192, + [1227] = 1186, + [1228] = 1228, + [1229] = 1229, + [1230] = 1230, + [1231] = 1231, + [1232] = 1232, + [1233] = 1183, + [1234] = 1183, + [1235] = 1179, + [1236] = 1183, + [1237] = 1192, + [1238] = 1183, + [1239] = 1194, + [1240] = 1240, + [1241] = 1241, + [1242] = 1194, + [1243] = 1192, + [1244] = 1186, + [1245] = 1179, + [1246] = 1246, + [1247] = 1247, + [1248] = 1194, + [1249] = 1249, + [1250] = 1250, + [1251] = 1251, + [1252] = 1252, + [1253] = 1253, + [1254] = 1254, + [1255] = 1255, + [1256] = 1256, + [1257] = 1257, + [1258] = 1258, + [1259] = 1259, + [1260] = 1260, + [1261] = 1261, + [1262] = 1194, + [1263] = 1192, + [1264] = 1186, + [1265] = 1179, + [1266] = 1266, + [1267] = 1267, + [1268] = 1268, + [1269] = 1269, + [1270] = 1186, + [1271] = 1271, + [1272] = 1272, + [1273] = 1273, + [1274] = 1183, + [1275] = 1275, + [1276] = 1194, + [1277] = 1192, + [1278] = 1186, + [1279] = 1179, + [1280] = 1280, + [1281] = 1281, + [1282] = 1282, + [1283] = 1186, + [1284] = 1284, + [1285] = 1285, + [1286] = 1179, + [1287] = 1186, + [1288] = 1192, + [1289] = 1194, + [1290] = 1290, + [1291] = 1291, + [1292] = 1292, + [1293] = 1293, + [1294] = 1294, + [1295] = 1295, + [1296] = 1296, + [1297] = 1297, + [1298] = 1298, + [1299] = 1299, + [1300] = 1300, + [1301] = 1301, + [1302] = 1302, + [1303] = 1303, + [1304] = 1304, + [1305] = 1305, + [1306] = 1306, + [1307] = 1307, + [1308] = 1308, + [1309] = 1309, + [1310] = 1310, + [1311] = 1311, + [1312] = 1312, + [1313] = 1313, + [1314] = 1314, + [1315] = 1315, + [1316] = 1316, + [1317] = 1317, + [1318] = 1318, + [1319] = 1319, + [1320] = 1320, + [1321] = 1321, + [1322] = 1322, + [1323] = 1323, + [1324] = 1324, + [1325] = 1325, + [1326] = 1326, + [1327] = 1327, + [1328] = 1328, + [1329] = 1329, + [1330] = 1330, + [1331] = 1331, + [1332] = 1332, + [1333] = 1333, + [1334] = 1334, + [1335] = 1335, + [1336] = 1336, + [1337] = 1337, + [1338] = 1338, + [1339] = 1339, + [1340] = 1340, + [1341] = 1341, + [1342] = 1342, + [1343] = 459, + [1344] = 1344, + [1345] = 1345, + [1346] = 1346, + [1347] = 1347, + [1348] = 1348, + [1349] = 1349, + [1350] = 1293, + [1351] = 1351, + [1352] = 1352, + [1353] = 1353, + [1354] = 1354, + [1355] = 1355, + [1356] = 1356, + [1357] = 1323, + [1358] = 1358, + [1359] = 1359, + [1360] = 1360, + [1361] = 1361, + [1362] = 461, + [1363] = 458, + [1364] = 1364, + [1365] = 1365, + [1366] = 1366, + [1367] = 1367, + [1368] = 1368, + [1369] = 1369, + [1370] = 1370, + [1371] = 1371, + [1372] = 1372, + [1373] = 1373, + [1374] = 1374, + [1375] = 1375, + [1376] = 1376, + [1377] = 1377, + [1378] = 1378, + [1379] = 1379, + [1380] = 1380, + [1381] = 1381, + [1382] = 1382, + [1383] = 1383, + [1384] = 1384, + [1385] = 1385, + [1386] = 1386, + [1387] = 1387, + [1388] = 1388, + [1389] = 1389, + [1390] = 1388, + [1391] = 1391, + [1392] = 1392, + [1393] = 1374, + [1394] = 1394, + [1395] = 1395, + [1396] = 1387, + [1397] = 1397, + [1398] = 1398, + [1399] = 1399, + [1400] = 1400, + [1401] = 1401, + [1402] = 1402, + [1403] = 1403, + [1404] = 1376, + [1405] = 1379, + [1406] = 1406, + [1407] = 1407, + [1408] = 1371, + [1409] = 1409, + [1410] = 1372, + [1411] = 1411, + [1412] = 1412, + [1413] = 1413, + [1414] = 1414, + [1415] = 1415, + [1416] = 1416, + [1417] = 1417, + [1418] = 1418, + [1419] = 1419, + [1420] = 1420, + [1421] = 1421, + [1422] = 1422, + [1423] = 1423, + [1424] = 1424, + [1425] = 1425, + [1426] = 1426, + [1427] = 1427, + [1428] = 1428, + [1429] = 1429, + [1430] = 1430, + [1431] = 1431, + [1432] = 1432, + [1433] = 1433, + [1434] = 1434, + [1435] = 1435, + [1436] = 1436, + [1437] = 1437, + [1438] = 1438, + [1439] = 1439, + [1440] = 1440, + [1441] = 1441, + [1442] = 1442, + [1443] = 1443, + [1444] = 1444, + [1445] = 1445, + [1446] = 1446, + [1447] = 1447, + [1448] = 1448, + [1449] = 1449, + [1450] = 1450, + [1451] = 1451, + [1452] = 1452, + [1453] = 1453, + [1454] = 1454, + [1455] = 1455, + [1456] = 1456, + [1457] = 1457, + [1458] = 1424, + [1459] = 1459, + [1460] = 1432, + [1461] = 1461, + [1462] = 1462, + [1463] = 1463, + [1464] = 1464, + [1465] = 1465, + [1466] = 1466, + [1467] = 1467, + [1468] = 1468, + [1469] = 1469, + [1470] = 1420, + [1471] = 1432, + [1472] = 1472, + [1473] = 1473, + [1474] = 1474, + [1475] = 1475, + [1476] = 1476, + [1477] = 1477, + [1478] = 1478, + [1479] = 1477, + [1480] = 1420, + [1481] = 1432, + [1482] = 1469, + [1483] = 1461, + [1484] = 1484, + [1485] = 1485, + [1486] = 1486, + [1487] = 1487, + [1488] = 1423, + [1489] = 1489, + [1490] = 1490, + [1491] = 1491, + [1492] = 1492, + [1493] = 1493, + [1494] = 1422, + [1495] = 1432, + [1496] = 1476, + [1497] = 1486, + [1498] = 1498, + [1499] = 1491, + [1500] = 1500, + [1501] = 1492, + [1502] = 1502, + [1503] = 1475, + [1504] = 1504, + [1505] = 1505, + [1506] = 1506, + [1507] = 1507, + [1508] = 1508, + [1509] = 1509, + [1510] = 1510, + [1511] = 1478, + [1512] = 1512, + [1513] = 1513, + [1514] = 1514, + [1515] = 1515, + [1516] = 1516, + [1517] = 1517, + [1518] = 1475, + [1519] = 1493, + [1520] = 1430, + [1521] = 1432, + [1522] = 1522, + [1523] = 1432, + [1524] = 1524, + [1525] = 1525, + [1526] = 1526, + [1527] = 1432, + [1528] = 1528, + [1529] = 1529, + [1530] = 1427, + [1531] = 1475, + [1532] = 1453, + [1533] = 1476, + [1534] = 1484, + [1535] = 1535, + [1536] = 1475, + [1537] = 1506, + [1538] = 1452, + [1539] = 1432, + [1540] = 1540, + [1541] = 1475, + [1542] = 1432, + [1543] = 1475, + [1544] = 1475, + [1545] = 1475, + [1546] = 1475, + [1547] = 1475, + [1548] = 1475, + [1549] = 1475, + [1550] = 1475, + [1551] = 1535, + [1552] = 1522, + [1553] = 1513, + [1554] = 1554, + [1555] = 1467, + [1556] = 1425, + [1557] = 1557, + [1558] = 1466, + [1559] = 1432, + [1560] = 1560, + [1561] = 1561, + [1562] = 1562, + [1563] = 1459, + [1564] = 1432, + [1565] = 1489, + [1566] = 1566, + [1567] = 1505, + [1568] = 1506, + [1569] = 1569, + [1570] = 1475, + [1571] = 1571, + [1572] = 1572, + [1573] = 1573, + [1574] = 1574, + [1575] = 1575, + [1576] = 1432, + [1577] = 1432, + [1578] = 1432, + [1579] = 1484, + [1580] = 1455, + [1581] = 1581, + [1582] = 1582, + [1583] = 1583, + [1584] = 1524, + [1585] = 1569, +}; + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(14); + if (lookahead == '!') ADVANCE(53); + if (lookahead == '"') ADVANCE(35); + if (lookahead == '#') ADVANCE(22); + if (lookahead == '$') ADVANCE(37); + if (lookahead == '&') ADVANCE(52); + if (lookahead == '\'') ADVANCE(38); + if (lookahead == '(') ADVANCE(41); + if (lookahead == ')') ADVANCE(42); + if (lookahead == '*') ADVANCE(70); + if (lookahead == '+') ADVANCE(66); + if (lookahead == ',') ADVANCE(28); + if (lookahead == '-') ADVANCE(68); + if (lookahead == '.') ADVANCE(73); + if (lookahead == '/') ADVANCE(71); + if (lookahead == ':') ADVANCE(30); + if (lookahead == ';') ADVANCE(48); + if (lookahead == '<') ADVANCE(62); + if (lookahead == '=') ADVANCE(47); + if (lookahead == '>') ADVANCE(63); + if (lookahead == '@') ADVANCE(25); + if (lookahead == '[') ADVANCE(43); + if (lookahead == ']') ADVANCE(44); + if (lookahead == '{') ADVANCE(26); + if (lookahead == '}') ADVANCE(27); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 1: + if (lookahead == '!') ADVANCE(10); + if (lookahead == '"') ADVANCE(35); + if (lookahead == '#') ADVANCE(22); + if (lookahead == '\'') ADVANCE(38); + if (lookahead == '(') ADVANCE(41); + if (lookahead == ')') ADVANCE(42); + if (lookahead == '*') ADVANCE(70); + if (lookahead == '+') ADVANCE(66); + if (lookahead == ',') ADVANCE(28); + if (lookahead == '-') ADVANCE(69); + if (lookahead == '.') ADVANCE(73); + if (lookahead == '/') ADVANCE(71); + if (lookahead == ':') ADVANCE(30); + if (lookahead == ';') ADVANCE(48); + if (lookahead == '<') ADVANCE(62); + if (lookahead == '=') ADVANCE(46); + if (lookahead == '>') ADVANCE(63); + if (lookahead == '[') ADVANCE(43); + if (lookahead == ']') ADVANCE(44); + if (lookahead == '{') ADVANCE(26); + if (lookahead == '}') ADVANCE(27); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 2: + if (lookahead == '!') ADVANCE(10); + if (lookahead == '#') ADVANCE(22); + if (lookahead == '&') ADVANCE(52); + if (lookahead == '(') ADVANCE(41); + if (lookahead == ')') ADVANCE(42); + if (lookahead == '*') ADVANCE(70); + if (lookahead == '+') ADVANCE(66); + if (lookahead == ',') ADVANCE(28); + if (lookahead == '-') ADVANCE(67); + if (lookahead == '.') ADVANCE(73); + if (lookahead == '/') ADVANCE(71); + if (lookahead == ':') ADVANCE(30); + if (lookahead == ';') ADVANCE(48); + if (lookahead == '<') ADVANCE(62); + if (lookahead == '=') ADVANCE(47); + if (lookahead == '>') ADVANCE(63); + if (lookahead == '[') ADVANCE(43); + if (lookahead == ']') ADVANCE(44); + if (lookahead == '{') ADVANCE(26); + if (lookahead == '}') ADVANCE(27); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 3: + if (lookahead == '!') ADVANCE(10); + if (lookahead == '#') ADVANCE(22); + if (lookahead == '&') ADVANCE(52); + if (lookahead == '(') ADVANCE(41); + if (lookahead == ')') ADVANCE(42); + if (lookahead == '*') ADVANCE(70); + if (lookahead == '+') ADVANCE(66); + if (lookahead == ',') ADVANCE(28); + if (lookahead == '-') ADVANCE(67); + if (lookahead == '.') ADVANCE(73); + if (lookahead == '/') ADVANCE(71); + if (lookahead == ':') ADVANCE(30); + if (lookahead == ';') ADVANCE(48); + if (lookahead == '<') ADVANCE(62); + if (lookahead == '=') ADVANCE(46); + if (lookahead == '>') ADVANCE(63); + if (lookahead == '[') ADVANCE(43); + if (lookahead == ']') ADVANCE(44); + if (lookahead == '{') ADVANCE(26); + if (lookahead == '}') ADVANCE(27); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 4: + if (lookahead == '"') ADVANCE(35); + if (lookahead == '#') ADVANCE(19); + if (lookahead == '$') ADVANCE(37); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(16); + if (lookahead != 0) ADVANCE(36); + END_STATE(); + case 5: + if (lookahead == '#') ADVANCE(22); + if (lookahead == '&') ADVANCE(52); + if (lookahead == ':') ADVANCE(29); + if (lookahead == '=') ADVANCE(11); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 6: + if (lookahead == '#') ADVANCE(20); + if (lookahead == '-') ADVANCE(8); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(18); + if (lookahead != 0) ADVANCE(51); + END_STATE(); + case 7: + if (lookahead == '-') ADVANCE(9); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); + END_STATE(); + case 8: + if (lookahead == '-') ADVANCE(9); + if (lookahead != 0) ADVANCE(50); + END_STATE(); + case 9: + if (lookahead == '-') ADVANCE(49); + END_STATE(); + case 10: + if (lookahead == '=') ADVANCE(61); + END_STATE(); + case 11: + if (lookahead == '>') ADVANCE(74); + END_STATE(); + case 12: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(34); + END_STATE(); + case 13: + if (eof) ADVANCE(14); + if (lookahead == '"') ADVANCE(35); + if (lookahead == '#') ADVANCE(22); + if (lookahead == '&') ADVANCE(52); + if (lookahead == '\'') ADVANCE(38); + if (lookahead == '(') ADVANCE(41); + if (lookahead == ')') ADVANCE(42); + if (lookahead == '-') ADVANCE(7); + if (lookahead == ':') ADVANCE(29); + if (lookahead == ';') ADVANCE(48); + if (lookahead == '=') ADVANCE(45); + if (lookahead == '@') ADVANCE(25); + if (lookahead == '[') ADVANCE(43); + if (lookahead == ']') ADVANCE(44); + if (lookahead == '{') ADVANCE(26); + if (lookahead == '}') ADVANCE(27); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 14: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 15: + ACCEPT_TOKEN(sym__whitespace); + END_STATE(); + case 16: + ACCEPT_TOKEN(sym__whitespace); + if (lookahead != 0 && + lookahead != '"' && + lookahead != '$') ADVANCE(36); + END_STATE(); + case 17: + ACCEPT_TOKEN(sym__whitespace); + if (lookahead != 0 && + lookahead != '\'') ADVANCE(40); + END_STATE(); + case 18: + ACCEPT_TOKEN(sym__whitespace); + if (lookahead != 0 && + lookahead != '-') ADVANCE(51); + END_STATE(); + case 19: + ACCEPT_TOKEN(sym_line_comment); + if (lookahead == '\n') ADVANCE(36); + if (lookahead == '"' || + lookahead == '$') ADVANCE(22); + if (lookahead != 0) ADVANCE(19); + END_STATE(); + case 20: + ACCEPT_TOKEN(sym_line_comment); + if (lookahead == '\n') ADVANCE(51); + if (lookahead == '-') ADVANCE(22); + if (lookahead != 0) ADVANCE(20); + END_STATE(); + case 21: + ACCEPT_TOKEN(sym_line_comment); + if (lookahead == '\n') ADVANCE(40); + if (lookahead == '\'') ADVANCE(22); + if (lookahead != 0) ADVANCE(21); + END_STATE(); + case 22: + ACCEPT_TOKEN(sym_line_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(22); + END_STATE(); + case 23: + ACCEPT_TOKEN(sym_name); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); + END_STATE(); + case 24: + ACCEPT_TOKEN(sym_index); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); + END_STATE(); + case 25: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 26: + ACCEPT_TOKEN(anon_sym_LBRACE); + END_STATE(); + case 27: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_COMMA); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 30: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == ':') ADVANCE(72); + END_STATE(); + case 31: + ACCEPT_TOKEN(sym_constant_int); + if (lookahead == '.') ADVANCE(12); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + END_STATE(); + case 32: + ACCEPT_TOKEN(sym_constant_int); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + END_STATE(); + case 33: + ACCEPT_TOKEN(sym_constant_int); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + END_STATE(); + case 34: + ACCEPT_TOKEN(sym_constant_float); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(34); + END_STATE(); + case 35: + ACCEPT_TOKEN(sym_string_quote); + END_STATE(); + case 36: + ACCEPT_TOKEN(sym_string_content); + if (lookahead != 0 && + lookahead != '"' && + lookahead != '$') ADVANCE(36); + END_STATE(); + case 37: + ACCEPT_TOKEN(anon_sym_DOLLAR); + END_STATE(); + case 38: + ACCEPT_TOKEN(anon_sym_SQUOTE); + END_STATE(); + case 39: + ACCEPT_TOKEN(aux_sym_constant_char_token1); + if (lookahead == '#') ADVANCE(21); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(17); + if (lookahead != 0 && + lookahead != '\'') ADVANCE(40); + END_STATE(); + case 40: + ACCEPT_TOKEN(aux_sym_constant_char_token1); + if (lookahead != 0 && + lookahead != '\'') ADVANCE(40); + END_STATE(); + case 41: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 42: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 43: + ACCEPT_TOKEN(anon_sym_LBRACK); + END_STATE(); + case 44: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_EQ); + END_STATE(); + case 46: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(60); + END_STATE(); + case 47: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(60); + if (lookahead == '>') ADVANCE(74); + END_STATE(); + case 48: + ACCEPT_TOKEN(anon_sym_SEMI); + END_STATE(); + case 49: + ACCEPT_TOKEN(anon_sym_DASH_DASH_DASH); + END_STATE(); + case 50: + ACCEPT_TOKEN(aux_sym_code_token1); + END_STATE(); + case 51: + ACCEPT_TOKEN(aux_sym_code_token1); + if (lookahead != 0 && + lookahead != '-') ADVANCE(51); + END_STATE(); + case 52: + ACCEPT_TOKEN(anon_sym_AMP); + END_STATE(); + case 53: + ACCEPT_TOKEN(sym_type_never); + END_STATE(); + case 54: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 55: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 56: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 57: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 58: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '=') ADVANCE(59); + END_STATE(); + case 59: + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + END_STATE(); + case 60: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 61: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 62: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '=') ADVANCE(64); + END_STATE(); + case 63: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(65); + END_STATE(); + case 64: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 65: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 66: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(54); + END_STATE(); + case 67: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(55); + END_STATE(); + case 68: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(55); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(32); + END_STATE(); + case 69: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(55); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(31); + END_STATE(); + case 70: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(56); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '=') ADVANCE(57); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_COLON_COLON); + END_STATE(); + case 73: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(58); + END_STATE(); + case 74: + ACCEPT_TOKEN(anon_sym_EQ_GT); + END_STATE(); + default: + return false; + } +} + +static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (lookahead == '_') ADVANCE(1); + if (lookahead == 'a') ADVANCE(2); + if (lookahead == 'b') ADVANCE(3); + if (lookahead == 'c') ADVANCE(4); + if (lookahead == 'd') ADVANCE(5); + if (lookahead == 'e') ADVANCE(6); + if (lookahead == 'f') ADVANCE(7); + if (lookahead == 'g') ADVANCE(8); + if (lookahead == 'i') ADVANCE(9); + if (lookahead == 'j') ADVANCE(10); + if (lookahead == 'l') ADVANCE(11); + if (lookahead == 'm') ADVANCE(12); + if (lookahead == 'n') ADVANCE(13); + if (lookahead == 'o') ADVANCE(14); + if (lookahead == 'p') ADVANCE(15); + if (lookahead == 'r') ADVANCE(16); + if (lookahead == 's') ADVANCE(17); + if (lookahead == 't') ADVANCE(18); + if (lookahead == 'u') ADVANCE(19); + if (lookahead == 'v') ADVANCE(20); + if (lookahead == 'w') ADVANCE(21); + END_STATE(); + case 1: + ACCEPT_TOKEN(anon_sym__); + END_STATE(); + case 2: + if (lookahead == 'n') ADVANCE(22); + if (lookahead == 's') ADVANCE(23); + END_STATE(); + case 3: + if (lookahead == 'r') ADVANCE(24); + END_STATE(); + case 4: + if (lookahead == 'a') ADVANCE(25); + if (lookahead == 'o') ADVANCE(26); + END_STATE(); + case 5: + if (lookahead == 'e') ADVANCE(27); + if (lookahead == 'o') ADVANCE(28); + END_STATE(); + case 6: + if (lookahead == 'l') ADVANCE(29); + if (lookahead == 'n') ADVANCE(30); + END_STATE(); + case 7: + if (lookahead == 'a') ADVANCE(31); + if (lookahead == 'i') ADVANCE(32); + if (lookahead == 'o') ADVANCE(33); + if (lookahead == 'r') ADVANCE(34); + if (lookahead == 'u') ADVANCE(35); + END_STATE(); + case 8: + if (lookahead == 'r') ADVANCE(36); + END_STATE(); + case 9: + if (lookahead == 'f') ADVANCE(37); + if (lookahead == 'n') ADVANCE(38); + END_STATE(); + case 10: + if (lookahead == 'o') ADVANCE(39); + END_STATE(); + case 11: + if (lookahead == 'o') ADVANCE(40); + END_STATE(); + case 12: + if (lookahead == 'a') ADVANCE(41); + if (lookahead == 'o') ADVANCE(42); + END_STATE(); + case 13: + if (lookahead == 'o') ADVANCE(43); + END_STATE(); + case 14: + if (lookahead == 'f') ADVANCE(44); + if (lookahead == 'n') ADVANCE(45); + if (lookahead == 'r') ADVANCE(46); + if (lookahead == 'v') ADVANCE(47); + END_STATE(); + case 15: + if (lookahead == 'y') ADVANCE(48); + END_STATE(); + case 16: + if (lookahead == 'e') ADVANCE(49); + if (lookahead == 'o') ADVANCE(50); + if (lookahead == 'u') ADVANCE(51); + END_STATE(); + case 17: + if (lookahead == 'e') ADVANCE(52); + if (lookahead == 't') ADVANCE(53); + END_STATE(); + case 18: + if (lookahead == 'h') ADVANCE(54); + if (lookahead == 'r') ADVANCE(55); + if (lookahead == 'y') ADVANCE(56); + END_STATE(); + case 19: + if (lookahead == 'n') ADVANCE(57); + if (lookahead == 's') ADVANCE(58); + END_STATE(); + case 20: + if (lookahead == 'a') ADVANCE(59); + END_STATE(); + case 21: + if (lookahead == 'h') ADVANCE(60); + if (lookahead == 'i') ADVANCE(61); + END_STATE(); + case 22: + if (lookahead == 'd') ADVANCE(62); + END_STATE(); + case 23: + ACCEPT_TOKEN(anon_sym_as); + END_STATE(); + case 24: + if (lookahead == 'e') ADVANCE(63); + END_STATE(); + case 25: + if (lookahead == 't') ADVANCE(64); + END_STATE(); + case 26: + if (lookahead == 'm') ADVANCE(65); + if (lookahead == 'n') ADVANCE(66); + END_STATE(); + case 27: + if (lookahead == 'f') ADVANCE(67); + if (lookahead == 's') ADVANCE(68); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_do); + END_STATE(); + case 29: + if (lookahead == 's') ADVANCE(69); + END_STATE(); + case 30: + if (lookahead == 'u') ADVANCE(70); + END_STATE(); + case 31: + if (lookahead == 'l') ADVANCE(71); + END_STATE(); + case 32: + if (lookahead == 'n') ADVANCE(72); + END_STATE(); + case 33: + if (lookahead == 'r') ADVANCE(73); + END_STATE(); + case 34: + if (lookahead == 'o') ADVANCE(74); + END_STATE(); + case 35: + if (lookahead == 'n') ADVANCE(75); + END_STATE(); + case 36: + if (lookahead == 'o') ADVANCE(76); + END_STATE(); + case 37: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 38: + ACCEPT_TOKEN(anon_sym_in); + if (lookahead == 't') ADVANCE(77); + END_STATE(); + case 39: + if (lookahead == 'i') ADVANCE(78); + END_STATE(); + case 40: + if (lookahead == 'o') ADVANCE(79); + END_STATE(); + case 41: + if (lookahead == 't') ADVANCE(80); + END_STATE(); + case 42: + if (lookahead == 'd') ADVANCE(81); + END_STATE(); + case 43: + if (lookahead == 't') ADVANCE(82); + END_STATE(); + case 44: + ACCEPT_TOKEN(anon_sym_of); + END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_on); + END_STATE(); + case 46: + ACCEPT_TOKEN(anon_sym_or); + if (lookahead == 'd') ADVANCE(83); + END_STATE(); + case 47: + if (lookahead == 'e') ADVANCE(84); + END_STATE(); + case 48: + if (lookahead == 't') ADVANCE(85); + END_STATE(); + case 49: + if (lookahead == 't') ADVANCE(86); + END_STATE(); + case 50: + if (lookahead == 'l') ADVANCE(87); + END_STATE(); + case 51: + if (lookahead == 's') ADVANCE(88); + END_STATE(); + case 52: + if (lookahead == 'l') ADVANCE(89); + END_STATE(); + case 53: + if (lookahead == 'r') ADVANCE(90); + END_STATE(); + case 54: + if (lookahead == 'r') ADVANCE(91); + END_STATE(); + case 55: + if (lookahead == 'u') ADVANCE(92); + if (lookahead == 'y') ADVANCE(93); + END_STATE(); + case 56: + if (lookahead == 'p') ADVANCE(94); + END_STATE(); + case 57: + if (lookahead == 'i') ADVANCE(95); + END_STATE(); + case 58: + if (lookahead == 'e') ADVANCE(96); + END_STATE(); + case 59: + if (lookahead == 'l') ADVANCE(97); + if (lookahead == 'r') ADVANCE(98); + END_STATE(); + case 60: + if (lookahead == 'e') ADVANCE(99); + if (lookahead == 'i') ADVANCE(100); + END_STATE(); + case 61: + if (lookahead == 't') ADVANCE(101); + END_STATE(); + case 62: + ACCEPT_TOKEN(anon_sym_and); + END_STATE(); + case 63: + if (lookahead == 'a') ADVANCE(102); + END_STATE(); + case 64: + if (lookahead == 'c') ADVANCE(103); + END_STATE(); + case 65: + if (lookahead == 'p') ADVANCE(104); + END_STATE(); + case 66: + if (lookahead == 't') ADVANCE(105); + END_STATE(); + case 67: + ACCEPT_TOKEN(anon_sym_def); + END_STATE(); + case 68: + if (lookahead == 'c') ADVANCE(106); + END_STATE(); + case 69: + if (lookahead == 'e') ADVANCE(107); + END_STATE(); + case 70: + if (lookahead == 'm') ADVANCE(108); + END_STATE(); + case 71: + if (lookahead == 's') ADVANCE(109); + END_STATE(); + case 72: + if (lookahead == 'a') ADVANCE(110); + END_STATE(); + case 73: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 74: + if (lookahead == 'm') ADVANCE(111); + END_STATE(); + case 75: + ACCEPT_TOKEN(anon_sym_fun); + END_STATE(); + case 76: + if (lookahead == 'u') ADVANCE(112); + END_STATE(); + case 77: + if (lookahead == 'o') ADVANCE(113); + END_STATE(); + case 78: + if (lookahead == 'n') ADVANCE(114); + END_STATE(); + case 79: + if (lookahead == 'p') ADVANCE(115); + END_STATE(); + case 80: + if (lookahead == 'c') ADVANCE(116); + END_STATE(); + case 81: + ACCEPT_TOKEN(anon_sym_mod); + END_STATE(); + case 82: + ACCEPT_TOKEN(anon_sym_not); + END_STATE(); + case 83: + if (lookahead == 'e') ADVANCE(117); + END_STATE(); + case 84: + if (lookahead == 'r') ADVANCE(118); + END_STATE(); + case 85: + if (lookahead == 'h') ADVANCE(119); + END_STATE(); + case 86: + if (lookahead == 'u') ADVANCE(120); + END_STATE(); + case 87: + if (lookahead == 'l') ADVANCE(121); + END_STATE(); + case 88: + if (lookahead == 't') ADVANCE(122); + END_STATE(); + case 89: + if (lookahead == 'e') ADVANCE(123); + END_STATE(); + case 90: + if (lookahead == 'u') ADVANCE(124); + END_STATE(); + case 91: + if (lookahead == 'o') ADVANCE(125); + END_STATE(); + case 92: + if (lookahead == 'e') ADVANCE(126); + END_STATE(); + case 93: + ACCEPT_TOKEN(anon_sym_try); + END_STATE(); + case 94: + if (lookahead == 'e') ADVANCE(127); + END_STATE(); + case 95: + if (lookahead == 'o') ADVANCE(128); + END_STATE(); + case 96: + ACCEPT_TOKEN(anon_sym_use); + END_STATE(); + case 97: + ACCEPT_TOKEN(anon_sym_val); + END_STATE(); + case 98: + ACCEPT_TOKEN(anon_sym_var); + END_STATE(); + case 99: + if (lookahead == 'r') ADVANCE(129); + END_STATE(); + case 100: + if (lookahead == 'l') ADVANCE(130); + END_STATE(); + case 101: + if (lookahead == 'h') ADVANCE(131); + END_STATE(); + case 102: + if (lookahead == 'k') ADVANCE(132); + END_STATE(); + case 103: + if (lookahead == 'h') ADVANCE(133); + END_STATE(); + case 104: + if (lookahead == 'u') ADVANCE(134); + END_STATE(); + case 105: + if (lookahead == 'i') ADVANCE(135); + END_STATE(); + case 106: + ACCEPT_TOKEN(anon_sym_desc); + END_STATE(); + case 107: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 108: + ACCEPT_TOKEN(anon_sym_enum); + END_STATE(); + case 109: + if (lookahead == 'e') ADVANCE(136); + END_STATE(); + case 110: + if (lookahead == 'l') ADVANCE(137); + END_STATE(); + case 111: + ACCEPT_TOKEN(anon_sym_from); + END_STATE(); + case 112: + if (lookahead == 'p') ADVANCE(138); + END_STATE(); + case 113: + ACCEPT_TOKEN(anon_sym_into); + END_STATE(); + case 114: + ACCEPT_TOKEN(anon_sym_join); + END_STATE(); + case 115: + ACCEPT_TOKEN(anon_sym_loop); + END_STATE(); + case 116: + if (lookahead == 'h') ADVANCE(139); + END_STATE(); + case 117: + if (lookahead == 'r') ADVANCE(140); + END_STATE(); + case 118: + ACCEPT_TOKEN(anon_sym_over); + END_STATE(); + case 119: + if (lookahead == 'o') ADVANCE(141); + END_STATE(); + case 120: + if (lookahead == 'r') ADVANCE(142); + END_STATE(); + case 121: + ACCEPT_TOKEN(anon_sym_roll); + END_STATE(); + case 122: + ACCEPT_TOKEN(anon_sym_rust); + END_STATE(); + case 123: + if (lookahead == 'c') ADVANCE(143); + END_STATE(); + case 124: + if (lookahead == 'c') ADVANCE(144); + END_STATE(); + case 125: + if (lookahead == 'w') ADVANCE(145); + END_STATE(); + case 126: + ACCEPT_TOKEN(anon_sym_true); + END_STATE(); + case 127: + ACCEPT_TOKEN(anon_sym_type); + END_STATE(); + case 128: + if (lookahead == 'n') ADVANCE(146); + END_STATE(); + case 129: + if (lookahead == 'e') ADVANCE(147); + END_STATE(); + case 130: + if (lookahead == 'e') ADVANCE(148); + END_STATE(); + case 131: + ACCEPT_TOKEN(anon_sym_with); + END_STATE(); + case 132: + ACCEPT_TOKEN(anon_sym_break); + END_STATE(); + case 133: + ACCEPT_TOKEN(anon_sym_catch); + END_STATE(); + case 134: + if (lookahead == 't') ADVANCE(149); + END_STATE(); + case 135: + if (lookahead == 'n') ADVANCE(150); + END_STATE(); + case 136: + ACCEPT_TOKEN(anon_sym_false); + END_STATE(); + case 137: + if (lookahead == 'l') ADVANCE(151); + END_STATE(); + case 138: + ACCEPT_TOKEN(anon_sym_group); + END_STATE(); + case 139: + ACCEPT_TOKEN(anon_sym_match); + END_STATE(); + case 140: + ACCEPT_TOKEN(anon_sym_order); + END_STATE(); + case 141: + if (lookahead == 'n') ADVANCE(152); + END_STATE(); + case 142: + if (lookahead == 'n') ADVANCE(153); + END_STATE(); + case 143: + if (lookahead == 't') ADVANCE(154); + END_STATE(); + case 144: + if (lookahead == 't') ADVANCE(155); + END_STATE(); + case 145: + ACCEPT_TOKEN(anon_sym_throw); + END_STATE(); + case 146: + ACCEPT_TOKEN(anon_sym_union); + END_STATE(); + case 147: + ACCEPT_TOKEN(anon_sym_where); + END_STATE(); + case 148: + ACCEPT_TOKEN(anon_sym_while); + END_STATE(); + case 149: + if (lookahead == 'e') ADVANCE(156); + END_STATE(); + case 150: + if (lookahead == 'u') ADVANCE(157); + END_STATE(); + case 151: + if (lookahead == 'y') ADVANCE(158); + END_STATE(); + case 152: + ACCEPT_TOKEN(anon_sym_python); + END_STATE(); + case 153: + ACCEPT_TOKEN(anon_sym_return); + END_STATE(); + case 154: + ACCEPT_TOKEN(anon_sym_select); + END_STATE(); + case 155: + ACCEPT_TOKEN(anon_sym_struct); + END_STATE(); + case 156: + ACCEPT_TOKEN(anon_sym_compute); + END_STATE(); + case 157: + if (lookahead == 'e') ADVANCE(159); + END_STATE(); + case 158: + ACCEPT_TOKEN(anon_sym_finally); + END_STATE(); + case 159: + ACCEPT_TOKEN(anon_sym_continue); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0}, + [1] = {.lex_state = 13}, + [2] = {.lex_state = 1}, + [3] = {.lex_state = 1}, + [4] = {.lex_state = 1}, + [5] = {.lex_state = 1}, + [6] = {.lex_state = 1}, + [7] = {.lex_state = 1}, + [8] = {.lex_state = 1}, + [9] = {.lex_state = 1}, + [10] = {.lex_state = 1}, + [11] = {.lex_state = 1}, + [12] = {.lex_state = 1}, + [13] = {.lex_state = 1}, + [14] = {.lex_state = 1}, + [15] = {.lex_state = 1}, + [16] = {.lex_state = 1}, + [17] = {.lex_state = 1}, + [18] = {.lex_state = 1}, + [19] = {.lex_state = 1}, + [20] = {.lex_state = 1}, + [21] = {.lex_state = 1}, + [22] = {.lex_state = 1}, + [23] = {.lex_state = 1}, + [24] = {.lex_state = 1}, + [25] = {.lex_state = 1}, + [26] = {.lex_state = 1}, + [27] = {.lex_state = 1}, + [28] = {.lex_state = 13}, + [29] = {.lex_state = 13}, + [30] = {.lex_state = 13}, + [31] = {.lex_state = 13}, + [32] = {.lex_state = 13}, + [33] = {.lex_state = 13}, + [34] = {.lex_state = 13}, + [35] = {.lex_state = 13}, + [36] = {.lex_state = 13}, + [37] = {.lex_state = 13}, + [38] = {.lex_state = 13}, + [39] = {.lex_state = 13}, + [40] = {.lex_state = 1}, + [41] = {.lex_state = 1}, + [42] = {.lex_state = 1}, + [43] = {.lex_state = 1}, + [44] = {.lex_state = 13}, + [45] = {.lex_state = 13}, + [46] = {.lex_state = 13}, + [47] = {.lex_state = 13}, + [48] = {.lex_state = 13}, + [49] = {.lex_state = 13}, + [50] = {.lex_state = 13}, + [51] = {.lex_state = 13}, + [52] = {.lex_state = 3}, + [53] = {.lex_state = 13}, + [54] = {.lex_state = 3}, + [55] = {.lex_state = 13}, + [56] = {.lex_state = 13}, + [57] = {.lex_state = 13}, + [58] = {.lex_state = 13}, + [59] = {.lex_state = 13}, + [60] = {.lex_state = 13}, + [61] = {.lex_state = 13}, + [62] = {.lex_state = 13}, + [63] = {.lex_state = 13}, + [64] = {.lex_state = 13}, + [65] = {.lex_state = 13}, + [66] = {.lex_state = 13}, + [67] = {.lex_state = 3}, + [68] = {.lex_state = 13}, + [69] = {.lex_state = 3}, + [70] = {.lex_state = 3}, + [71] = {.lex_state = 3}, + [72] = {.lex_state = 13}, + [73] = {.lex_state = 3}, + [74] = {.lex_state = 3}, + [75] = {.lex_state = 3}, + [76] = {.lex_state = 13}, + [77] = {.lex_state = 13}, + [78] = {.lex_state = 13}, + [79] = {.lex_state = 13}, + [80] = {.lex_state = 13}, + [81] = {.lex_state = 13}, + [82] = {.lex_state = 13}, + [83] = {.lex_state = 13}, + [84] = {.lex_state = 13}, + [85] = {.lex_state = 13}, + [86] = {.lex_state = 13}, + [87] = {.lex_state = 13}, + [88] = {.lex_state = 13}, + [89] = {.lex_state = 13}, + [90] = {.lex_state = 13}, + [91] = {.lex_state = 13}, + [92] = {.lex_state = 13}, + [93] = {.lex_state = 13}, + [94] = {.lex_state = 13}, + [95] = {.lex_state = 13}, + [96] = {.lex_state = 13}, + [97] = {.lex_state = 13}, + [98] = {.lex_state = 13}, + [99] = {.lex_state = 13}, + [100] = {.lex_state = 13}, + [101] = {.lex_state = 13}, + [102] = {.lex_state = 13}, + [103] = {.lex_state = 13}, + [104] = {.lex_state = 13}, + [105] = {.lex_state = 13}, + [106] = {.lex_state = 13}, + [107] = {.lex_state = 13}, + [108] = {.lex_state = 13}, + [109] = {.lex_state = 13}, + [110] = {.lex_state = 13}, + [111] = {.lex_state = 13}, + [112] = {.lex_state = 13}, + [113] = {.lex_state = 13}, + [114] = {.lex_state = 13}, + [115] = {.lex_state = 13}, + [116] = {.lex_state = 13}, + [117] = {.lex_state = 13}, + [118] = {.lex_state = 13}, + [119] = {.lex_state = 13}, + [120] = {.lex_state = 13}, + [121] = {.lex_state = 13}, + [122] = {.lex_state = 13}, + [123] = {.lex_state = 13}, + [124] = {.lex_state = 13}, + [125] = {.lex_state = 13}, + [126] = {.lex_state = 13}, + [127] = {.lex_state = 13}, + [128] = {.lex_state = 13}, + [129] = {.lex_state = 13}, + [130] = {.lex_state = 13}, + [131] = {.lex_state = 13}, + [132] = {.lex_state = 13}, + [133] = {.lex_state = 13}, + [134] = {.lex_state = 13}, + [135] = {.lex_state = 13}, + [136] = {.lex_state = 13}, + [137] = {.lex_state = 13}, + [138] = {.lex_state = 13}, + [139] = {.lex_state = 13}, + [140] = {.lex_state = 13}, + [141] = {.lex_state = 13}, + [142] = {.lex_state = 13}, + [143] = {.lex_state = 13}, + [144] = {.lex_state = 13}, + [145] = {.lex_state = 13}, + [146] = {.lex_state = 3}, + [147] = {.lex_state = 13}, + [148] = {.lex_state = 3}, + [149] = {.lex_state = 13}, + [150] = {.lex_state = 13}, + [151] = {.lex_state = 13}, + [152] = {.lex_state = 13}, + [153] = {.lex_state = 13}, + [154] = {.lex_state = 13}, + [155] = {.lex_state = 13}, + [156] = {.lex_state = 13}, + [157] = {.lex_state = 13}, + [158] = {.lex_state = 13}, + [159] = {.lex_state = 13}, + [160] = {.lex_state = 13}, + [161] = {.lex_state = 13}, + [162] = {.lex_state = 13}, + [163] = {.lex_state = 13}, + [164] = {.lex_state = 13}, + [165] = {.lex_state = 3}, + [166] = {.lex_state = 13}, + [167] = {.lex_state = 13}, + [168] = {.lex_state = 13}, + [169] = {.lex_state = 13}, + [170] = {.lex_state = 13}, + [171] = {.lex_state = 13}, + [172] = {.lex_state = 13}, + [173] = {.lex_state = 13}, + [174] = {.lex_state = 3}, + [175] = {.lex_state = 13}, + [176] = {.lex_state = 13}, + [177] = {.lex_state = 13}, + [178] = {.lex_state = 13}, + [179] = {.lex_state = 13}, + [180] = {.lex_state = 13}, + [181] = {.lex_state = 13}, + [182] = {.lex_state = 13}, + [183] = {.lex_state = 13}, + [184] = {.lex_state = 13}, + [185] = {.lex_state = 13}, + [186] = {.lex_state = 13}, + [187] = {.lex_state = 13}, + [188] = {.lex_state = 13}, + [189] = {.lex_state = 13}, + [190] = {.lex_state = 13}, + [191] = {.lex_state = 13}, + [192] = {.lex_state = 13}, + [193] = {.lex_state = 13}, + [194] = {.lex_state = 13}, + [195] = {.lex_state = 13}, + [196] = {.lex_state = 13}, + [197] = {.lex_state = 13}, + [198] = {.lex_state = 13}, + [199] = {.lex_state = 13}, + [200] = {.lex_state = 13}, + [201] = {.lex_state = 13}, + [202] = {.lex_state = 13}, + [203] = {.lex_state = 13}, + [204] = {.lex_state = 13}, + [205] = {.lex_state = 13}, + [206] = {.lex_state = 13}, + [207] = {.lex_state = 13}, + [208] = {.lex_state = 13}, + [209] = {.lex_state = 13}, + [210] = {.lex_state = 13}, + [211] = {.lex_state = 3}, + [212] = {.lex_state = 13}, + [213] = {.lex_state = 13}, + [214] = {.lex_state = 13}, + [215] = {.lex_state = 3}, + [216] = {.lex_state = 13}, + [217] = {.lex_state = 13}, + [218] = {.lex_state = 13}, + [219] = {.lex_state = 13}, + [220] = {.lex_state = 13}, + [221] = {.lex_state = 13}, + [222] = {.lex_state = 13}, + [223] = {.lex_state = 13}, + [224] = {.lex_state = 13}, + [225] = {.lex_state = 13}, + [226] = {.lex_state = 13}, + [227] = {.lex_state = 13}, + [228] = {.lex_state = 13}, + [229] = {.lex_state = 13}, + [230] = {.lex_state = 13}, + [231] = {.lex_state = 13}, + [232] = {.lex_state = 13}, + [233] = {.lex_state = 13}, + [234] = {.lex_state = 13}, + [235] = {.lex_state = 13}, + [236] = {.lex_state = 13}, + [237] = {.lex_state = 13}, + [238] = {.lex_state = 13}, + [239] = {.lex_state = 13}, + [240] = {.lex_state = 13}, + [241] = {.lex_state = 13}, + [242] = {.lex_state = 13}, + [243] = {.lex_state = 13}, + [244] = {.lex_state = 13}, + [245] = {.lex_state = 13}, + [246] = {.lex_state = 13}, + [247] = {.lex_state = 13}, + [248] = {.lex_state = 13}, + [249] = {.lex_state = 13}, + [250] = {.lex_state = 13}, + [251] = {.lex_state = 13}, + [252] = {.lex_state = 13}, + [253] = {.lex_state = 13}, + [254] = {.lex_state = 13}, + [255] = {.lex_state = 13}, + [256] = {.lex_state = 13}, + [257] = {.lex_state = 13}, + [258] = {.lex_state = 13}, + [259] = {.lex_state = 13}, + [260] = {.lex_state = 13}, + [261] = {.lex_state = 13}, + [262] = {.lex_state = 13}, + [263] = {.lex_state = 13}, + [264] = {.lex_state = 13}, + [265] = {.lex_state = 13}, + [266] = {.lex_state = 13}, + [267] = {.lex_state = 13}, + [268] = {.lex_state = 13}, + [269] = {.lex_state = 13}, + [270] = {.lex_state = 13}, + [271] = {.lex_state = 13}, + [272] = {.lex_state = 13}, + [273] = {.lex_state = 13}, + [274] = {.lex_state = 13}, + [275] = {.lex_state = 13}, + [276] = {.lex_state = 13}, + [277] = {.lex_state = 13}, + [278] = {.lex_state = 13}, + [279] = {.lex_state = 13}, + [280] = {.lex_state = 13}, + [281] = {.lex_state = 13}, + [282] = {.lex_state = 13}, + [283] = {.lex_state = 13}, + [284] = {.lex_state = 13}, + [285] = {.lex_state = 13}, + [286] = {.lex_state = 13}, + [287] = {.lex_state = 13}, + [288] = {.lex_state = 13}, + [289] = {.lex_state = 13}, + [290] = {.lex_state = 13}, + [291] = {.lex_state = 13}, + [292] = {.lex_state = 13}, + [293] = {.lex_state = 13}, + [294] = {.lex_state = 13}, + [295] = {.lex_state = 13}, + [296] = {.lex_state = 13}, + [297] = {.lex_state = 13}, + [298] = {.lex_state = 13}, + [299] = {.lex_state = 13}, + [300] = {.lex_state = 13}, + [301] = {.lex_state = 13}, + [302] = {.lex_state = 13}, + [303] = {.lex_state = 13}, + [304] = {.lex_state = 13}, + [305] = {.lex_state = 13}, + [306] = {.lex_state = 13}, + [307] = {.lex_state = 13}, + [308] = {.lex_state = 13}, + [309] = {.lex_state = 13}, + [310] = {.lex_state = 13}, + [311] = {.lex_state = 13}, + [312] = {.lex_state = 13}, + [313] = {.lex_state = 13}, + [314] = {.lex_state = 13}, + [315] = {.lex_state = 13}, + [316] = {.lex_state = 13}, + [317] = {.lex_state = 13}, + [318] = {.lex_state = 13}, + [319] = {.lex_state = 13}, + [320] = {.lex_state = 13}, + [321] = {.lex_state = 13}, + [322] = {.lex_state = 13}, + [323] = {.lex_state = 13}, + [324] = {.lex_state = 13}, + [325] = {.lex_state = 13}, + [326] = {.lex_state = 13}, + [327] = {.lex_state = 13}, + [328] = {.lex_state = 13}, + [329] = {.lex_state = 13}, + [330] = {.lex_state = 13}, + [331] = {.lex_state = 13}, + [332] = {.lex_state = 13}, + [333] = {.lex_state = 13}, + [334] = {.lex_state = 13}, + [335] = {.lex_state = 13}, + [336] = {.lex_state = 13}, + [337] = {.lex_state = 13}, + [338] = {.lex_state = 13}, + [339] = {.lex_state = 13}, + [340] = {.lex_state = 13}, + [341] = {.lex_state = 13}, + [342] = {.lex_state = 13}, + [343] = {.lex_state = 13}, + [344] = {.lex_state = 13}, + [345] = {.lex_state = 13}, + [346] = {.lex_state = 13}, + [347] = {.lex_state = 13}, + [348] = {.lex_state = 13}, + [349] = {.lex_state = 13}, + [350] = {.lex_state = 13}, + [351] = {.lex_state = 13}, + [352] = {.lex_state = 13}, + [353] = {.lex_state = 13}, + [354] = {.lex_state = 13}, + [355] = {.lex_state = 13}, + [356] = {.lex_state = 13}, + [357] = {.lex_state = 13}, + [358] = {.lex_state = 13}, + [359] = {.lex_state = 13}, + [360] = {.lex_state = 13}, + [361] = {.lex_state = 13}, + [362] = {.lex_state = 13}, + [363] = {.lex_state = 13}, + [364] = {.lex_state = 13}, + [365] = {.lex_state = 13}, + [366] = {.lex_state = 13}, + [367] = {.lex_state = 13}, + [368] = {.lex_state = 13}, + [369] = {.lex_state = 13}, + [370] = {.lex_state = 13}, + [371] = {.lex_state = 13}, + [372] = {.lex_state = 13}, + [373] = {.lex_state = 13}, + [374] = {.lex_state = 13}, + [375] = {.lex_state = 13}, + [376] = {.lex_state = 13}, + [377] = {.lex_state = 13}, + [378] = {.lex_state = 13}, + [379] = {.lex_state = 13}, + [380] = {.lex_state = 13}, + [381] = {.lex_state = 13}, + [382] = {.lex_state = 13}, + [383] = {.lex_state = 13}, + [384] = {.lex_state = 13}, + [385] = {.lex_state = 13}, + [386] = {.lex_state = 13}, + [387] = {.lex_state = 13}, + [388] = {.lex_state = 13}, + [389] = {.lex_state = 13}, + [390] = {.lex_state = 13}, + [391] = {.lex_state = 13}, + [392] = {.lex_state = 13}, + [393] = {.lex_state = 13}, + [394] = {.lex_state = 13}, + [395] = {.lex_state = 13}, + [396] = {.lex_state = 13}, + [397] = {.lex_state = 13}, + [398] = {.lex_state = 13}, + [399] = {.lex_state = 13}, + [400] = {.lex_state = 13}, + [401] = {.lex_state = 13}, + [402] = {.lex_state = 3}, + [403] = {.lex_state = 3}, + [404] = {.lex_state = 3}, + [405] = {.lex_state = 3}, + [406] = {.lex_state = 3}, + [407] = {.lex_state = 3}, + [408] = {.lex_state = 3}, + [409] = {.lex_state = 3}, + [410] = {.lex_state = 3}, + [411] = {.lex_state = 3}, + [412] = {.lex_state = 3}, + [413] = {.lex_state = 3}, + [414] = {.lex_state = 3}, + [415] = {.lex_state = 3}, + [416] = {.lex_state = 3}, + [417] = {.lex_state = 3}, + [418] = {.lex_state = 3}, + [419] = {.lex_state = 3}, + [420] = {.lex_state = 3}, + [421] = {.lex_state = 3}, + [422] = {.lex_state = 3}, + [423] = {.lex_state = 3}, + [424] = {.lex_state = 3}, + [425] = {.lex_state = 3}, + [426] = {.lex_state = 3}, + [427] = {.lex_state = 3}, + [428] = {.lex_state = 3}, + [429] = {.lex_state = 3}, + [430] = {.lex_state = 3}, + [431] = {.lex_state = 3}, + [432] = {.lex_state = 3}, + [433] = {.lex_state = 3}, + [434] = {.lex_state = 3}, + [435] = {.lex_state = 3}, + [436] = {.lex_state = 3}, + [437] = {.lex_state = 3}, + [438] = {.lex_state = 3}, + [439] = {.lex_state = 3}, + [440] = {.lex_state = 3}, + [441] = {.lex_state = 3}, + [442] = {.lex_state = 3}, + [443] = {.lex_state = 3}, + [444] = {.lex_state = 3}, + [445] = {.lex_state = 3}, + [446] = {.lex_state = 3}, + [447] = {.lex_state = 3}, + [448] = {.lex_state = 3}, + [449] = {.lex_state = 3}, + [450] = {.lex_state = 3}, + [451] = {.lex_state = 3}, + [452] = {.lex_state = 3}, + [453] = {.lex_state = 3}, + [454] = {.lex_state = 3}, + [455] = {.lex_state = 3}, + [456] = {.lex_state = 3}, + [457] = {.lex_state = 3}, + [458] = {.lex_state = 3}, + [459] = {.lex_state = 3}, + [460] = {.lex_state = 3}, + [461] = {.lex_state = 3}, + [462] = {.lex_state = 3}, + [463] = {.lex_state = 3}, + [464] = {.lex_state = 3}, + [465] = {.lex_state = 3}, + [466] = {.lex_state = 3}, + [467] = {.lex_state = 3}, + [468] = {.lex_state = 3}, + [469] = {.lex_state = 3}, + [470] = {.lex_state = 3}, + [471] = {.lex_state = 3}, + [472] = {.lex_state = 3}, + [473] = {.lex_state = 3}, + [474] = {.lex_state = 3}, + [475] = {.lex_state = 3}, + [476] = {.lex_state = 3}, + [477] = {.lex_state = 3}, + [478] = {.lex_state = 3}, + [479] = {.lex_state = 3}, + [480] = {.lex_state = 3}, + [481] = {.lex_state = 3}, + [482] = {.lex_state = 3}, + [483] = {.lex_state = 3}, + [484] = {.lex_state = 3}, + [485] = {.lex_state = 3}, + [486] = {.lex_state = 3}, + [487] = {.lex_state = 3}, + [488] = {.lex_state = 3}, + [489] = {.lex_state = 3}, + [490] = {.lex_state = 3}, + [491] = {.lex_state = 3}, + [492] = {.lex_state = 3}, + [493] = {.lex_state = 3}, + [494] = {.lex_state = 3}, + [495] = {.lex_state = 3}, + [496] = {.lex_state = 3}, + [497] = {.lex_state = 3}, + [498] = {.lex_state = 3}, + [499] = {.lex_state = 3}, + [500] = {.lex_state = 3}, + [501] = {.lex_state = 3}, + [502] = {.lex_state = 3}, + [503] = {.lex_state = 3}, + [504] = {.lex_state = 3}, + [505] = {.lex_state = 3}, + [506] = {.lex_state = 3}, + [507] = {.lex_state = 3}, + [508] = {.lex_state = 3}, + [509] = {.lex_state = 3}, + [510] = {.lex_state = 3}, + [511] = {.lex_state = 3}, + [512] = {.lex_state = 3}, + [513] = {.lex_state = 3}, + [514] = {.lex_state = 3}, + [515] = {.lex_state = 3}, + [516] = {.lex_state = 3}, + [517] = {.lex_state = 3}, + [518] = {.lex_state = 3}, + [519] = {.lex_state = 3}, + [520] = {.lex_state = 3}, + [521] = {.lex_state = 3}, + [522] = {.lex_state = 3}, + [523] = {.lex_state = 3}, + [524] = {.lex_state = 3}, + [525] = {.lex_state = 3}, + [526] = {.lex_state = 3}, + [527] = {.lex_state = 3}, + [528] = {.lex_state = 3}, + [529] = {.lex_state = 3}, + [530] = {.lex_state = 3}, + [531] = {.lex_state = 3}, + [532] = {.lex_state = 3}, + [533] = {.lex_state = 3}, + [534] = {.lex_state = 3}, + [535] = {.lex_state = 3}, + [536] = {.lex_state = 3}, + [537] = {.lex_state = 3}, + [538] = {.lex_state = 3}, + [539] = {.lex_state = 3}, + [540] = {.lex_state = 3}, + [541] = {.lex_state = 3}, + [542] = {.lex_state = 3}, + [543] = {.lex_state = 3}, + [544] = {.lex_state = 3}, + [545] = {.lex_state = 3}, + [546] = {.lex_state = 3}, + [547] = {.lex_state = 3}, + [548] = {.lex_state = 3}, + [549] = {.lex_state = 3}, + [550] = {.lex_state = 3}, + [551] = {.lex_state = 3}, + [552] = {.lex_state = 3}, + [553] = {.lex_state = 3}, + [554] = {.lex_state = 3}, + [555] = {.lex_state = 3}, + [556] = {.lex_state = 3}, + [557] = {.lex_state = 3}, + [558] = {.lex_state = 3}, + [559] = {.lex_state = 3}, + [560] = {.lex_state = 3}, + [561] = {.lex_state = 3}, + [562] = {.lex_state = 3}, + [563] = {.lex_state = 3}, + [564] = {.lex_state = 3}, + [565] = {.lex_state = 3}, + [566] = {.lex_state = 3}, + [567] = {.lex_state = 3}, + [568] = {.lex_state = 3}, + [569] = {.lex_state = 3}, + [570] = {.lex_state = 3}, + [571] = {.lex_state = 3}, + [572] = {.lex_state = 3}, + [573] = {.lex_state = 3}, + [574] = {.lex_state = 3}, + [575] = {.lex_state = 3}, + [576] = {.lex_state = 3}, + [577] = {.lex_state = 3}, + [578] = {.lex_state = 3}, + [579] = {.lex_state = 3}, + [580] = {.lex_state = 3}, + [581] = {.lex_state = 3}, + [582] = {.lex_state = 3}, + [583] = {.lex_state = 3}, + [584] = {.lex_state = 3}, + [585] = {.lex_state = 3}, + [586] = {.lex_state = 3}, + [587] = {.lex_state = 3}, + [588] = {.lex_state = 3}, + [589] = {.lex_state = 3}, + [590] = {.lex_state = 3}, + [591] = {.lex_state = 3}, + [592] = {.lex_state = 3}, + [593] = {.lex_state = 3}, + [594] = {.lex_state = 3}, + [595] = {.lex_state = 3}, + [596] = {.lex_state = 3}, + [597] = {.lex_state = 3}, + [598] = {.lex_state = 3}, + [599] = {.lex_state = 3}, + [600] = {.lex_state = 3}, + [601] = {.lex_state = 3}, + [602] = {.lex_state = 3}, + [603] = {.lex_state = 3}, + [604] = {.lex_state = 3}, + [605] = {.lex_state = 3}, + [606] = {.lex_state = 3}, + [607] = {.lex_state = 3}, + [608] = {.lex_state = 3}, + [609] = {.lex_state = 3}, + [610] = {.lex_state = 3}, + [611] = {.lex_state = 3}, + [612] = {.lex_state = 3}, + [613] = {.lex_state = 3}, + [614] = {.lex_state = 3}, + [615] = {.lex_state = 3}, + [616] = {.lex_state = 3}, + [617] = {.lex_state = 3}, + [618] = {.lex_state = 3}, + [619] = {.lex_state = 3}, + [620] = {.lex_state = 3}, + [621] = {.lex_state = 3}, + [622] = {.lex_state = 3}, + [623] = {.lex_state = 3}, + [624] = {.lex_state = 3}, + [625] = {.lex_state = 3}, + [626] = {.lex_state = 3}, + [627] = {.lex_state = 3}, + [628] = {.lex_state = 3}, + [629] = {.lex_state = 3}, + [630] = {.lex_state = 3}, + [631] = {.lex_state = 3}, + [632] = {.lex_state = 3}, + [633] = {.lex_state = 3}, + [634] = {.lex_state = 3}, + [635] = {.lex_state = 3}, + [636] = {.lex_state = 3}, + [637] = {.lex_state = 3}, + [638] = {.lex_state = 3}, + [639] = {.lex_state = 3}, + [640] = {.lex_state = 3}, + [641] = {.lex_state = 3}, + [642] = {.lex_state = 3}, + [643] = {.lex_state = 3}, + [644] = {.lex_state = 3}, + [645] = {.lex_state = 3}, + [646] = {.lex_state = 3}, + [647] = {.lex_state = 3}, + [648] = {.lex_state = 3}, + [649] = {.lex_state = 3}, + [650] = {.lex_state = 3}, + [651] = {.lex_state = 3}, + [652] = {.lex_state = 3}, + [653] = {.lex_state = 3}, + [654] = {.lex_state = 3}, + [655] = {.lex_state = 3}, + [656] = {.lex_state = 3}, + [657] = {.lex_state = 3}, + [658] = {.lex_state = 3}, + [659] = {.lex_state = 3}, + [660] = {.lex_state = 3}, + [661] = {.lex_state = 3}, + [662] = {.lex_state = 3}, + [663] = {.lex_state = 3}, + [664] = {.lex_state = 3}, + [665] = {.lex_state = 3}, + [666] = {.lex_state = 3}, + [667] = {.lex_state = 3}, + [668] = {.lex_state = 3}, + [669] = {.lex_state = 3}, + [670] = {.lex_state = 3}, + [671] = {.lex_state = 3}, + [672] = {.lex_state = 3}, + [673] = {.lex_state = 3}, + [674] = {.lex_state = 3}, + [675] = {.lex_state = 3}, + [676] = {.lex_state = 3}, + [677] = {.lex_state = 3}, + [678] = {.lex_state = 3}, + [679] = {.lex_state = 3}, + [680] = {.lex_state = 3}, + [681] = {.lex_state = 3}, + [682] = {.lex_state = 3}, + [683] = {.lex_state = 3}, + [684] = {.lex_state = 3}, + [685] = {.lex_state = 3}, + [686] = {.lex_state = 3}, + [687] = {.lex_state = 3}, + [688] = {.lex_state = 3}, + [689] = {.lex_state = 3}, + [690] = {.lex_state = 3}, + [691] = {.lex_state = 3}, + [692] = {.lex_state = 3}, + [693] = {.lex_state = 3}, + [694] = {.lex_state = 3}, + [695] = {.lex_state = 3}, + [696] = {.lex_state = 3}, + [697] = {.lex_state = 3}, + [698] = {.lex_state = 3}, + [699] = {.lex_state = 3}, + [700] = {.lex_state = 3}, + [701] = {.lex_state = 3}, + [702] = {.lex_state = 3}, + [703] = {.lex_state = 3}, + [704] = {.lex_state = 3}, + [705] = {.lex_state = 3}, + [706] = {.lex_state = 3}, + [707] = {.lex_state = 3}, + [708] = {.lex_state = 3}, + [709] = {.lex_state = 3}, + [710] = {.lex_state = 3}, + [711] = {.lex_state = 3}, + [712] = {.lex_state = 3}, + [713] = {.lex_state = 3}, + [714] = {.lex_state = 3}, + [715] = {.lex_state = 3}, + [716] = {.lex_state = 3}, + [717] = {.lex_state = 3}, + [718] = {.lex_state = 3}, + [719] = {.lex_state = 3}, + [720] = {.lex_state = 3}, + [721] = {.lex_state = 3}, + [722] = {.lex_state = 3}, + [723] = {.lex_state = 3}, + [724] = {.lex_state = 3}, + [725] = {.lex_state = 3}, + [726] = {.lex_state = 3}, + [727] = {.lex_state = 3}, + [728] = {.lex_state = 3}, + [729] = {.lex_state = 3}, + [730] = {.lex_state = 3}, + [731] = {.lex_state = 3}, + [732] = {.lex_state = 3}, + [733] = {.lex_state = 3}, + [734] = {.lex_state = 3}, + [735] = {.lex_state = 3}, + [736] = {.lex_state = 3}, + [737] = {.lex_state = 3}, + [738] = {.lex_state = 3}, + [739] = {.lex_state = 3}, + [740] = {.lex_state = 3}, + [741] = {.lex_state = 3}, + [742] = {.lex_state = 3}, + [743] = {.lex_state = 3}, + [744] = {.lex_state = 3}, + [745] = {.lex_state = 3}, + [746] = {.lex_state = 3}, + [747] = {.lex_state = 3}, + [748] = {.lex_state = 3}, + [749] = {.lex_state = 3}, + [750] = {.lex_state = 3}, + [751] = {.lex_state = 3}, + [752] = {.lex_state = 3}, + [753] = {.lex_state = 3}, + [754] = {.lex_state = 3}, + [755] = {.lex_state = 3}, + [756] = {.lex_state = 3}, + [757] = {.lex_state = 3}, + [758] = {.lex_state = 3}, + [759] = {.lex_state = 3}, + [760] = {.lex_state = 3}, + [761] = {.lex_state = 3}, + [762] = {.lex_state = 3}, + [763] = {.lex_state = 3}, + [764] = {.lex_state = 3}, + [765] = {.lex_state = 3}, + [766] = {.lex_state = 3}, + [767] = {.lex_state = 3}, + [768] = {.lex_state = 3}, + [769] = {.lex_state = 3}, + [770] = {.lex_state = 3}, + [771] = {.lex_state = 3}, + [772] = {.lex_state = 3}, + [773] = {.lex_state = 3}, + [774] = {.lex_state = 3}, + [775] = {.lex_state = 3}, + [776] = {.lex_state = 3}, + [777] = {.lex_state = 3}, + [778] = {.lex_state = 3}, + [779] = {.lex_state = 3}, + [780] = {.lex_state = 13}, + [781] = {.lex_state = 13}, + [782] = {.lex_state = 13}, + [783] = {.lex_state = 13}, + [784] = {.lex_state = 13}, + [785] = {.lex_state = 13}, + [786] = {.lex_state = 13}, + [787] = {.lex_state = 13}, + [788] = {.lex_state = 13}, + [789] = {.lex_state = 13}, + [790] = {.lex_state = 13}, + [791] = {.lex_state = 13}, + [792] = {.lex_state = 13}, + [793] = {.lex_state = 13}, + [794] = {.lex_state = 13}, + [795] = {.lex_state = 13}, + [796] = {.lex_state = 13}, + [797] = {.lex_state = 13}, + [798] = {.lex_state = 13}, + [799] = {.lex_state = 13}, + [800] = {.lex_state = 13}, + [801] = {.lex_state = 13}, + [802] = {.lex_state = 13}, + [803] = {.lex_state = 13}, + [804] = {.lex_state = 13}, + [805] = {.lex_state = 13}, + [806] = {.lex_state = 13}, + [807] = {.lex_state = 13}, + [808] = {.lex_state = 13}, + [809] = {.lex_state = 13}, + [810] = {.lex_state = 13}, + [811] = {.lex_state = 13}, + [812] = {.lex_state = 13}, + [813] = {.lex_state = 13}, + [814] = {.lex_state = 13}, + [815] = {.lex_state = 13}, + [816] = {.lex_state = 13}, + [817] = {.lex_state = 13}, + [818] = {.lex_state = 13}, + [819] = {.lex_state = 13}, + [820] = {.lex_state = 13}, + [821] = {.lex_state = 13}, + [822] = {.lex_state = 13}, + [823] = {.lex_state = 13}, + [824] = {.lex_state = 13}, + [825] = {.lex_state = 13}, + [826] = {.lex_state = 13}, + [827] = {.lex_state = 13}, + [828] = {.lex_state = 13}, + [829] = {.lex_state = 13}, + [830] = {.lex_state = 13}, + [831] = {.lex_state = 13}, + [832] = {.lex_state = 13}, + [833] = {.lex_state = 13}, + [834] = {.lex_state = 13}, + [835] = {.lex_state = 2}, + [836] = {.lex_state = 2}, + [837] = {.lex_state = 2}, + [838] = {.lex_state = 2}, + [839] = {.lex_state = 2}, + [840] = {.lex_state = 2}, + [841] = {.lex_state = 2}, + [842] = {.lex_state = 2}, + [843] = {.lex_state = 2}, + [844] = {.lex_state = 2}, + [845] = {.lex_state = 2}, + [846] = {.lex_state = 2}, + [847] = {.lex_state = 2}, + [848] = {.lex_state = 2}, + [849] = {.lex_state = 2}, + [850] = {.lex_state = 2}, + [851] = {.lex_state = 2}, + [852] = {.lex_state = 3}, + [853] = {.lex_state = 3}, + [854] = {.lex_state = 3}, + [855] = {.lex_state = 3}, + [856] = {.lex_state = 3}, + [857] = {.lex_state = 3}, + [858] = {.lex_state = 3}, + [859] = {.lex_state = 3}, + [860] = {.lex_state = 13}, + [861] = {.lex_state = 3}, + [862] = {.lex_state = 3}, + [863] = {.lex_state = 3}, + [864] = {.lex_state = 3}, + [865] = {.lex_state = 3}, + [866] = {.lex_state = 3}, + [867] = {.lex_state = 13}, + [868] = {.lex_state = 3}, + [869] = {.lex_state = 13}, + [870] = {.lex_state = 3}, + [871] = {.lex_state = 3}, + [872] = {.lex_state = 3}, + [873] = {.lex_state = 3}, + [874] = {.lex_state = 3}, + [875] = {.lex_state = 3}, + [876] = {.lex_state = 3}, + [877] = {.lex_state = 3}, + [878] = {.lex_state = 3}, + [879] = {.lex_state = 3}, + [880] = {.lex_state = 3}, + [881] = {.lex_state = 3}, + [882] = {.lex_state = 3}, + [883] = {.lex_state = 3}, + [884] = {.lex_state = 13}, + [885] = {.lex_state = 3}, + [886] = {.lex_state = 13}, + [887] = {.lex_state = 3}, + [888] = {.lex_state = 13}, + [889] = {.lex_state = 3}, + [890] = {.lex_state = 3}, + [891] = {.lex_state = 3}, + [892] = {.lex_state = 3}, + [893] = {.lex_state = 3}, + [894] = {.lex_state = 3}, + [895] = {.lex_state = 3}, + [896] = {.lex_state = 3}, + [897] = {.lex_state = 13}, + [898] = {.lex_state = 3}, + [899] = {.lex_state = 3}, + [900] = {.lex_state = 13}, + [901] = {.lex_state = 13}, + [902] = {.lex_state = 3}, + [903] = {.lex_state = 13}, + [904] = {.lex_state = 13}, + [905] = {.lex_state = 13}, + [906] = {.lex_state = 13}, + [907] = {.lex_state = 13}, + [908] = {.lex_state = 13}, + [909] = {.lex_state = 13}, + [910] = {.lex_state = 13}, + [911] = {.lex_state = 13}, + [912] = {.lex_state = 13}, + [913] = {.lex_state = 13}, + [914] = {.lex_state = 13}, + [915] = {.lex_state = 3}, + [916] = {.lex_state = 13}, + [917] = {.lex_state = 3}, + [918] = {.lex_state = 13}, + [919] = {.lex_state = 13}, + [920] = {.lex_state = 13}, + [921] = {.lex_state = 13}, + [922] = {.lex_state = 3}, + [923] = {.lex_state = 13}, + [924] = {.lex_state = 13}, + [925] = {.lex_state = 13}, + [926] = {.lex_state = 3}, + [927] = {.lex_state = 13}, + [928] = {.lex_state = 3}, + [929] = {.lex_state = 13}, + [930] = {.lex_state = 13}, + [931] = {.lex_state = 13}, + [932] = {.lex_state = 13}, + [933] = {.lex_state = 3}, + [934] = {.lex_state = 13}, + [935] = {.lex_state = 3}, + [936] = {.lex_state = 13}, + [937] = {.lex_state = 13}, + [938] = {.lex_state = 3}, + [939] = {.lex_state = 3}, + [940] = {.lex_state = 3}, + [941] = {.lex_state = 3}, + [942] = {.lex_state = 13}, + [943] = {.lex_state = 13}, + [944] = {.lex_state = 13}, + [945] = {.lex_state = 13}, + [946] = {.lex_state = 13}, + [947] = {.lex_state = 13}, + [948] = {.lex_state = 13}, + [949] = {.lex_state = 13}, + [950] = {.lex_state = 13}, + [951] = {.lex_state = 13}, + [952] = {.lex_state = 13}, + [953] = {.lex_state = 13}, + [954] = {.lex_state = 13}, + [955] = {.lex_state = 13}, + [956] = {.lex_state = 13}, + [957] = {.lex_state = 13}, + [958] = {.lex_state = 13}, + [959] = {.lex_state = 13}, + [960] = {.lex_state = 13}, + [961] = {.lex_state = 13}, + [962] = {.lex_state = 13}, + [963] = {.lex_state = 13}, + [964] = {.lex_state = 13}, + [965] = {.lex_state = 13}, + [966] = {.lex_state = 13}, + [967] = {.lex_state = 13}, + [968] = {.lex_state = 13}, + [969] = {.lex_state = 13}, + [970] = {.lex_state = 13}, + [971] = {.lex_state = 13}, + [972] = {.lex_state = 13}, + [973] = {.lex_state = 13}, + [974] = {.lex_state = 13}, + [975] = {.lex_state = 13}, + [976] = {.lex_state = 13}, + [977] = {.lex_state = 13}, + [978] = {.lex_state = 13}, + [979] = {.lex_state = 13}, + [980] = {.lex_state = 13}, + [981] = {.lex_state = 13}, + [982] = {.lex_state = 13}, + [983] = {.lex_state = 13}, + [984] = {.lex_state = 13}, + [985] = {.lex_state = 13}, + [986] = {.lex_state = 13}, + [987] = {.lex_state = 3}, + [988] = {.lex_state = 0}, + [989] = {.lex_state = 0}, + [990] = {.lex_state = 3}, + [991] = {.lex_state = 0}, + [992] = {.lex_state = 0}, + [993] = {.lex_state = 3}, + [994] = {.lex_state = 0}, + [995] = {.lex_state = 0}, + [996] = {.lex_state = 3}, + [997] = {.lex_state = 0}, + [998] = {.lex_state = 0}, + [999] = {.lex_state = 0}, + [1000] = {.lex_state = 0}, + [1001] = {.lex_state = 0}, + [1002] = {.lex_state = 0}, + [1003] = {.lex_state = 3}, + [1004] = {.lex_state = 0}, + [1005] = {.lex_state = 3}, + [1006] = {.lex_state = 3}, + [1007] = {.lex_state = 3}, + [1008] = {.lex_state = 3}, + [1009] = {.lex_state = 3}, + [1010] = {.lex_state = 3}, + [1011] = {.lex_state = 3}, + [1012] = {.lex_state = 3}, + [1013] = {.lex_state = 3}, + [1014] = {.lex_state = 3}, + [1015] = {.lex_state = 3}, + [1016] = {.lex_state = 3}, + [1017] = {.lex_state = 3}, + [1018] = {.lex_state = 3}, + [1019] = {.lex_state = 3}, + [1020] = {.lex_state = 3}, + [1021] = {.lex_state = 3}, + [1022] = {.lex_state = 3}, + [1023] = {.lex_state = 3}, + [1024] = {.lex_state = 3}, + [1025] = {.lex_state = 3}, + [1026] = {.lex_state = 3}, + [1027] = {.lex_state = 3}, + [1028] = {.lex_state = 3}, + [1029] = {.lex_state = 3}, + [1030] = {.lex_state = 3}, + [1031] = {.lex_state = 3}, + [1032] = {.lex_state = 3}, + [1033] = {.lex_state = 3}, + [1034] = {.lex_state = 3}, + [1035] = {.lex_state = 3}, + [1036] = {.lex_state = 3}, + [1037] = {.lex_state = 3}, + [1038] = {.lex_state = 3}, + [1039] = {.lex_state = 3}, + [1040] = {.lex_state = 3}, + [1041] = {.lex_state = 3}, + [1042] = {.lex_state = 3}, + [1043] = {.lex_state = 3}, + [1044] = {.lex_state = 3}, + [1045] = {.lex_state = 3}, + [1046] = {.lex_state = 3}, + [1047] = {.lex_state = 3}, + [1048] = {.lex_state = 3}, + [1049] = {.lex_state = 3}, + [1050] = {.lex_state = 3}, + [1051] = {.lex_state = 3}, + [1052] = {.lex_state = 3}, + [1053] = {.lex_state = 3}, + [1054] = {.lex_state = 3}, + [1055] = {.lex_state = 3}, + [1056] = {.lex_state = 3}, + [1057] = {.lex_state = 3}, + [1058] = {.lex_state = 3}, + [1059] = {.lex_state = 3}, + [1060] = {.lex_state = 3}, + [1061] = {.lex_state = 3}, + [1062] = {.lex_state = 3}, + [1063] = {.lex_state = 3}, + [1064] = {.lex_state = 3}, + [1065] = {.lex_state = 3}, + [1066] = {.lex_state = 3}, + [1067] = {.lex_state = 3}, + [1068] = {.lex_state = 3}, + [1069] = {.lex_state = 3}, + [1070] = {.lex_state = 3}, + [1071] = {.lex_state = 3}, + [1072] = {.lex_state = 3}, + [1073] = {.lex_state = 3}, + [1074] = {.lex_state = 3}, + [1075] = {.lex_state = 3}, + [1076] = {.lex_state = 3}, + [1077] = {.lex_state = 3}, + [1078] = {.lex_state = 3}, + [1079] = {.lex_state = 0}, + [1080] = {.lex_state = 0}, + [1081] = {.lex_state = 0}, + [1082] = {.lex_state = 0}, + [1083] = {.lex_state = 0}, + [1084] = {.lex_state = 0}, + [1085] = {.lex_state = 0}, + [1086] = {.lex_state = 0}, + [1087] = {.lex_state = 0}, + [1088] = {.lex_state = 0}, + [1089] = {.lex_state = 0}, + [1090] = {.lex_state = 0}, + [1091] = {.lex_state = 0}, + [1092] = {.lex_state = 0}, + [1093] = {.lex_state = 0}, + [1094] = {.lex_state = 0}, + [1095] = {.lex_state = 0}, + [1096] = {.lex_state = 0}, + [1097] = {.lex_state = 0}, + [1098] = {.lex_state = 0}, + [1099] = {.lex_state = 0}, + [1100] = {.lex_state = 0}, + [1101] = {.lex_state = 0}, + [1102] = {.lex_state = 0}, + [1103] = {.lex_state = 0}, + [1104] = {.lex_state = 0}, + [1105] = {.lex_state = 0}, + [1106] = {.lex_state = 0}, + [1107] = {.lex_state = 0}, + [1108] = {.lex_state = 0}, + [1109] = {.lex_state = 0}, + [1110] = {.lex_state = 0}, + [1111] = {.lex_state = 0}, + [1112] = {.lex_state = 0}, + [1113] = {.lex_state = 0}, + [1114] = {.lex_state = 0}, + [1115] = {.lex_state = 0}, + [1116] = {.lex_state = 0}, + [1117] = {.lex_state = 0}, + [1118] = {.lex_state = 0}, + [1119] = {.lex_state = 0}, + [1120] = {.lex_state = 0}, + [1121] = {.lex_state = 0}, + [1122] = {.lex_state = 0}, + [1123] = {.lex_state = 0}, + [1124] = {.lex_state = 0}, + [1125] = {.lex_state = 0}, + [1126] = {.lex_state = 0}, + [1127] = {.lex_state = 0}, + [1128] = {.lex_state = 0}, + [1129] = {.lex_state = 0}, + [1130] = {.lex_state = 0}, + [1131] = {.lex_state = 0}, + [1132] = {.lex_state = 0}, + [1133] = {.lex_state = 0}, + [1134] = {.lex_state = 0}, + [1135] = {.lex_state = 0}, + [1136] = {.lex_state = 0}, + [1137] = {.lex_state = 0}, + [1138] = {.lex_state = 0}, + [1139] = {.lex_state = 0}, + [1140] = {.lex_state = 0}, + [1141] = {.lex_state = 0}, + [1142] = {.lex_state = 0}, + [1143] = {.lex_state = 0}, + [1144] = {.lex_state = 0}, + [1145] = {.lex_state = 0}, + [1146] = {.lex_state = 0}, + [1147] = {.lex_state = 0}, + [1148] = {.lex_state = 0}, + [1149] = {.lex_state = 13}, + [1150] = {.lex_state = 0}, + [1151] = {.lex_state = 0}, + [1152] = {.lex_state = 0}, + [1153] = {.lex_state = 0}, + [1154] = {.lex_state = 0}, + [1155] = {.lex_state = 0}, + [1156] = {.lex_state = 0}, + [1157] = {.lex_state = 0}, + [1158] = {.lex_state = 0}, + [1159] = {.lex_state = 0}, + [1160] = {.lex_state = 0}, + [1161] = {.lex_state = 0}, + [1162] = {.lex_state = 0}, + [1163] = {.lex_state = 0}, + [1164] = {.lex_state = 0}, + [1165] = {.lex_state = 0}, + [1166] = {.lex_state = 0}, + [1167] = {.lex_state = 0}, + [1168] = {.lex_state = 0}, + [1169] = {.lex_state = 4}, + [1170] = {.lex_state = 4}, + [1171] = {.lex_state = 4}, + [1172] = {.lex_state = 4}, + [1173] = {.lex_state = 4}, + [1174] = {.lex_state = 0}, + [1175] = {.lex_state = 0}, + [1176] = {.lex_state = 0}, + [1177] = {.lex_state = 0}, + [1178] = {.lex_state = 0}, + [1179] = {.lex_state = 13}, + [1180] = {.lex_state = 13}, + [1181] = {.lex_state = 13}, + [1182] = {.lex_state = 0}, + [1183] = {.lex_state = 0}, + [1184] = {.lex_state = 0}, + [1185] = {.lex_state = 0}, + [1186] = {.lex_state = 13}, + [1187] = {.lex_state = 13}, + [1188] = {.lex_state = 13}, + [1189] = {.lex_state = 0}, + [1190] = {.lex_state = 13}, + [1191] = {.lex_state = 13}, + [1192] = {.lex_state = 0}, + [1193] = {.lex_state = 0}, + [1194] = {.lex_state = 13}, + [1195] = {.lex_state = 13}, + [1196] = {.lex_state = 13}, + [1197] = {.lex_state = 13}, + [1198] = {.lex_state = 13}, + [1199] = {.lex_state = 0}, + [1200] = {.lex_state = 13}, + [1201] = {.lex_state = 13}, + [1202] = {.lex_state = 0}, + [1203] = {.lex_state = 0}, + [1204] = {.lex_state = 13}, + [1205] = {.lex_state = 13}, + [1206] = {.lex_state = 0}, + [1207] = {.lex_state = 0}, + [1208] = {.lex_state = 13}, + [1209] = {.lex_state = 13}, + [1210] = {.lex_state = 13}, + [1211] = {.lex_state = 6}, + [1212] = {.lex_state = 0}, + [1213] = {.lex_state = 0}, + [1214] = {.lex_state = 0}, + [1215] = {.lex_state = 13}, + [1216] = {.lex_state = 13}, + [1217] = {.lex_state = 13}, + [1218] = {.lex_state = 13}, + [1219] = {.lex_state = 13}, + [1220] = {.lex_state = 0}, + [1221] = {.lex_state = 13}, + [1222] = {.lex_state = 0}, + [1223] = {.lex_state = 0}, + [1224] = {.lex_state = 13}, + [1225] = {.lex_state = 0}, + [1226] = {.lex_state = 0}, + [1227] = {.lex_state = 13}, + [1228] = {.lex_state = 0}, + [1229] = {.lex_state = 0}, + [1230] = {.lex_state = 13}, + [1231] = {.lex_state = 0}, + [1232] = {.lex_state = 0}, + [1233] = {.lex_state = 0}, + [1234] = {.lex_state = 0}, + [1235] = {.lex_state = 13}, + [1236] = {.lex_state = 0}, + [1237] = {.lex_state = 0}, + [1238] = {.lex_state = 0}, + [1239] = {.lex_state = 13}, + [1240] = {.lex_state = 0}, + [1241] = {.lex_state = 0}, + [1242] = {.lex_state = 13}, + [1243] = {.lex_state = 0}, + [1244] = {.lex_state = 13}, + [1245] = {.lex_state = 13}, + [1246] = {.lex_state = 0}, + [1247] = {.lex_state = 0}, + [1248] = {.lex_state = 13}, + [1249] = {.lex_state = 13}, + [1250] = {.lex_state = 0}, + [1251] = {.lex_state = 13}, + [1252] = {.lex_state = 13}, + [1253] = {.lex_state = 0}, + [1254] = {.lex_state = 5}, + [1255] = {.lex_state = 0}, + [1256] = {.lex_state = 0}, + [1257] = {.lex_state = 13}, + [1258] = {.lex_state = 0}, + [1259] = {.lex_state = 13}, + [1260] = {.lex_state = 0}, + [1261] = {.lex_state = 0}, + [1262] = {.lex_state = 13}, + [1263] = {.lex_state = 0}, + [1264] = {.lex_state = 13}, + [1265] = {.lex_state = 13}, + [1266] = {.lex_state = 0}, + [1267] = {.lex_state = 0}, + [1268] = {.lex_state = 13}, + [1269] = {.lex_state = 0}, + [1270] = {.lex_state = 13}, + [1271] = {.lex_state = 0}, + [1272] = {.lex_state = 13}, + [1273] = {.lex_state = 13}, + [1274] = {.lex_state = 0}, + [1275] = {.lex_state = 0}, + [1276] = {.lex_state = 13}, + [1277] = {.lex_state = 0}, + [1278] = {.lex_state = 13}, + [1279] = {.lex_state = 13}, + [1280] = {.lex_state = 0}, + [1281] = {.lex_state = 0}, + [1282] = {.lex_state = 0}, + [1283] = {.lex_state = 13}, + [1284] = {.lex_state = 13}, + [1285] = {.lex_state = 0}, + [1286] = {.lex_state = 13}, + [1287] = {.lex_state = 13}, + [1288] = {.lex_state = 0}, + [1289] = {.lex_state = 13}, + [1290] = {.lex_state = 0}, + [1291] = {.lex_state = 0}, + [1292] = {.lex_state = 0}, + [1293] = {.lex_state = 0}, + [1294] = {.lex_state = 0}, + [1295] = {.lex_state = 0}, + [1296] = {.lex_state = 0}, + [1297] = {.lex_state = 0}, + [1298] = {.lex_state = 0}, + [1299] = {.lex_state = 0}, + [1300] = {.lex_state = 0}, + [1301] = {.lex_state = 6}, + [1302] = {.lex_state = 0}, + [1303] = {.lex_state = 0}, + [1304] = {.lex_state = 0}, + [1305] = {.lex_state = 0}, + [1306] = {.lex_state = 0}, + [1307] = {.lex_state = 0}, + [1308] = {.lex_state = 0}, + [1309] = {.lex_state = 0}, + [1310] = {.lex_state = 0}, + [1311] = {.lex_state = 0}, + [1312] = {.lex_state = 0}, + [1313] = {.lex_state = 0}, + [1314] = {.lex_state = 0}, + [1315] = {.lex_state = 0}, + [1316] = {.lex_state = 0}, + [1317] = {.lex_state = 0}, + [1318] = {.lex_state = 0}, + [1319] = {.lex_state = 0}, + [1320] = {.lex_state = 0}, + [1321] = {.lex_state = 0}, + [1322] = {.lex_state = 0}, + [1323] = {.lex_state = 0}, + [1324] = {.lex_state = 0}, + [1325] = {.lex_state = 0}, + [1326] = {.lex_state = 0}, + [1327] = {.lex_state = 0}, + [1328] = {.lex_state = 0}, + [1329] = {.lex_state = 0}, + [1330] = {.lex_state = 0}, + [1331] = {.lex_state = 0}, + [1332] = {.lex_state = 0}, + [1333] = {.lex_state = 0}, + [1334] = {.lex_state = 0}, + [1335] = {.lex_state = 0}, + [1336] = {.lex_state = 0}, + [1337] = {.lex_state = 0}, + [1338] = {.lex_state = 0}, + [1339] = {.lex_state = 0}, + [1340] = {.lex_state = 0}, + [1341] = {.lex_state = 0}, + [1342] = {.lex_state = 0}, + [1343] = {.lex_state = 4}, + [1344] = {.lex_state = 0}, + [1345] = {.lex_state = 0}, + [1346] = {.lex_state = 0}, + [1347] = {.lex_state = 0}, + [1348] = {.lex_state = 4}, + [1349] = {.lex_state = 0}, + [1350] = {.lex_state = 0}, + [1351] = {.lex_state = 0}, + [1352] = {.lex_state = 0}, + [1353] = {.lex_state = 0}, + [1354] = {.lex_state = 0}, + [1355] = {.lex_state = 6}, + [1356] = {.lex_state = 0}, + [1357] = {.lex_state = 0}, + [1358] = {.lex_state = 0}, + [1359] = {.lex_state = 0}, + [1360] = {.lex_state = 0}, + [1361] = {.lex_state = 0}, + [1362] = {.lex_state = 4}, + [1363] = {.lex_state = 4}, + [1364] = {.lex_state = 0}, + [1365] = {.lex_state = 0}, + [1366] = {.lex_state = 13}, + [1367] = {.lex_state = 0}, + [1368] = {.lex_state = 0}, + [1369] = {.lex_state = 0}, + [1370] = {.lex_state = 0}, + [1371] = {.lex_state = 0}, + [1372] = {.lex_state = 0}, + [1373] = {.lex_state = 0}, + [1374] = {.lex_state = 3}, + [1375] = {.lex_state = 0}, + [1376] = {.lex_state = 0}, + [1377] = {.lex_state = 0}, + [1378] = {.lex_state = 0}, + [1379] = {.lex_state = 0}, + [1380] = {.lex_state = 3}, + [1381] = {.lex_state = 0}, + [1382] = {.lex_state = 0}, + [1383] = {.lex_state = 0}, + [1384] = {.lex_state = 0}, + [1385] = {.lex_state = 0}, + [1386] = {.lex_state = 0}, + [1387] = {.lex_state = 0}, + [1388] = {.lex_state = 0}, + [1389] = {.lex_state = 0}, + [1390] = {.lex_state = 0}, + [1391] = {.lex_state = 0}, + [1392] = {.lex_state = 0}, + [1393] = {.lex_state = 3}, + [1394] = {.lex_state = 0}, + [1395] = {.lex_state = 0}, + [1396] = {.lex_state = 0}, + [1397] = {.lex_state = 0}, + [1398] = {.lex_state = 0}, + [1399] = {.lex_state = 13}, + [1400] = {.lex_state = 0}, + [1401] = {.lex_state = 0}, + [1402] = {.lex_state = 0}, + [1403] = {.lex_state = 0}, + [1404] = {.lex_state = 0}, + [1405] = {.lex_state = 0}, + [1406] = {.lex_state = 0}, + [1407] = {.lex_state = 0}, + [1408] = {.lex_state = 0}, + [1409] = {.lex_state = 0}, + [1410] = {.lex_state = 0}, + [1411] = {.lex_state = 0}, + [1412] = {.lex_state = 0}, + [1413] = {.lex_state = 0}, + [1414] = {.lex_state = 0}, + [1415] = {.lex_state = 0}, + [1416] = {.lex_state = 0}, + [1417] = {.lex_state = 0}, + [1418] = {.lex_state = 0}, + [1419] = {.lex_state = 0}, + [1420] = {.lex_state = 0}, + [1421] = {.lex_state = 0}, + [1422] = {.lex_state = 0}, + [1423] = {.lex_state = 0}, + [1424] = {.lex_state = 0}, + [1425] = {.lex_state = 0}, + [1426] = {.lex_state = 0}, + [1427] = {.lex_state = 0}, + [1428] = {.lex_state = 0}, + [1429] = {.lex_state = 0}, + [1430] = {.lex_state = 0}, + [1431] = {.lex_state = 0}, + [1432] = {.lex_state = 0}, + [1433] = {.lex_state = 0}, + [1434] = {.lex_state = 0}, + [1435] = {.lex_state = 0}, + [1436] = {.lex_state = 0}, + [1437] = {.lex_state = 0}, + [1438] = {.lex_state = 0}, + [1439] = {.lex_state = 0}, + [1440] = {.lex_state = 0}, + [1441] = {.lex_state = 0}, + [1442] = {.lex_state = 13}, + [1443] = {.lex_state = 0}, + [1444] = {.lex_state = 0}, + [1445] = {.lex_state = 0}, + [1446] = {.lex_state = 13}, + [1447] = {.lex_state = 0}, + [1448] = {.lex_state = 0}, + [1449] = {.lex_state = 0}, + [1450] = {.lex_state = 0}, + [1451] = {.lex_state = 0}, + [1452] = {.lex_state = 0}, + [1453] = {.lex_state = 0}, + [1454] = {.lex_state = 0}, + [1455] = {.lex_state = 0}, + [1456] = {.lex_state = 0}, + [1457] = {.lex_state = 0}, + [1458] = {.lex_state = 0}, + [1459] = {.lex_state = 0}, + [1460] = {.lex_state = 0}, + [1461] = {.lex_state = 0}, + [1462] = {.lex_state = 0}, + [1463] = {.lex_state = 0}, + [1464] = {.lex_state = 13}, + [1465] = {.lex_state = 0}, + [1466] = {.lex_state = 0}, + [1467] = {.lex_state = 0}, + [1468] = {.lex_state = 0}, + [1469] = {.lex_state = 0}, + [1470] = {.lex_state = 0}, + [1471] = {.lex_state = 0}, + [1472] = {.lex_state = 0}, + [1473] = {.lex_state = 0}, + [1474] = {.lex_state = 0}, + [1475] = {.lex_state = 0}, + [1476] = {.lex_state = 0}, + [1477] = {.lex_state = 0}, + [1478] = {.lex_state = 0}, + [1479] = {.lex_state = 0}, + [1480] = {.lex_state = 0}, + [1481] = {.lex_state = 0}, + [1482] = {.lex_state = 0}, + [1483] = {.lex_state = 0}, + [1484] = {.lex_state = 0}, + [1485] = {.lex_state = 13}, + [1486] = {.lex_state = 0}, + [1487] = {.lex_state = 0}, + [1488] = {.lex_state = 0}, + [1489] = {.lex_state = 0}, + [1490] = {.lex_state = 0}, + [1491] = {.lex_state = 0}, + [1492] = {.lex_state = 0}, + [1493] = {.lex_state = 0}, + [1494] = {.lex_state = 0}, + [1495] = {.lex_state = 0}, + [1496] = {.lex_state = 0}, + [1497] = {.lex_state = 0}, + [1498] = {.lex_state = 0}, + [1499] = {.lex_state = 0}, + [1500] = {.lex_state = 0}, + [1501] = {.lex_state = 0}, + [1502] = {.lex_state = 0}, + [1503] = {.lex_state = 0}, + [1504] = {.lex_state = 0}, + [1505] = {.lex_state = 0}, + [1506] = {.lex_state = 0}, + [1507] = {.lex_state = 0}, + [1508] = {.lex_state = 0}, + [1509] = {.lex_state = 0}, + [1510] = {.lex_state = 0}, + [1511] = {.lex_state = 0}, + [1512] = {.lex_state = 0}, + [1513] = {.lex_state = 0}, + [1514] = {.lex_state = 0}, + [1515] = {.lex_state = 0}, + [1516] = {.lex_state = 0}, + [1517] = {.lex_state = 0}, + [1518] = {.lex_state = 0}, + [1519] = {.lex_state = 0}, + [1520] = {.lex_state = 0}, + [1521] = {.lex_state = 0}, + [1522] = {.lex_state = 0}, + [1523] = {.lex_state = 0}, + [1524] = {.lex_state = 39}, + [1525] = {.lex_state = 0}, + [1526] = {.lex_state = 0}, + [1527] = {.lex_state = 0}, + [1528] = {.lex_state = 0}, + [1529] = {.lex_state = 0}, + [1530] = {.lex_state = 0}, + [1531] = {.lex_state = 0}, + [1532] = {.lex_state = 0}, + [1533] = {.lex_state = 0}, + [1534] = {.lex_state = 0}, + [1535] = {.lex_state = 0}, + [1536] = {.lex_state = 0}, + [1537] = {.lex_state = 0}, + [1538] = {.lex_state = 0}, + [1539] = {.lex_state = 0}, + [1540] = {.lex_state = 0}, + [1541] = {.lex_state = 0}, + [1542] = {.lex_state = 0}, + [1543] = {.lex_state = 0}, + [1544] = {.lex_state = 0}, + [1545] = {.lex_state = 0}, + [1546] = {.lex_state = 0}, + [1547] = {.lex_state = 0}, + [1548] = {.lex_state = 0}, + [1549] = {.lex_state = 0}, + [1550] = {.lex_state = 0}, + [1551] = {.lex_state = 0}, + [1552] = {.lex_state = 0}, + [1553] = {.lex_state = 0}, + [1554] = {.lex_state = 0}, + [1555] = {.lex_state = 0}, + [1556] = {.lex_state = 0}, + [1557] = {.lex_state = 0}, + [1558] = {.lex_state = 0}, + [1559] = {.lex_state = 0}, + [1560] = {.lex_state = 13}, + [1561] = {.lex_state = 0}, + [1562] = {.lex_state = 0}, + [1563] = {.lex_state = 0}, + [1564] = {.lex_state = 0}, + [1565] = {.lex_state = 0}, + [1566] = {.lex_state = 0}, + [1567] = {.lex_state = 0}, + [1568] = {.lex_state = 0}, + [1569] = {.lex_state = 0}, + [1570] = {.lex_state = 0}, + [1571] = {.lex_state = 0}, + [1572] = {.lex_state = 0}, + [1573] = {.lex_state = 0}, + [1574] = {.lex_state = 0}, + [1575] = {.lex_state = 0}, + [1576] = {.lex_state = 0}, + [1577] = {.lex_state = 0}, + [1578] = {.lex_state = 0}, + [1579] = {.lex_state = 0}, + [1580] = {.lex_state = 0}, + [1581] = {.lex_state = 0}, + [1582] = {.lex_state = 0}, + [1583] = {.lex_state = 0}, + [1584] = {.lex_state = 39}, + [1585] = {.lex_state = 0}, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_name] = ACTIONS(1), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [sym_index] = ACTIONS(1), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [sym_constant_int] = ACTIONS(1), + [sym_string_quote] = ACTIONS(1), + [anon_sym_DOLLAR] = ACTIONS(1), + [anon_sym_SQUOTE] = ACTIONS(1), + [anon_sym_true] = ACTIONS(1), + [anon_sym_false] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_def] = ACTIONS(1), + [anon_sym_LBRACK] = ACTIONS(1), + [anon_sym_RBRACK] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), + [anon_sym_type] = ACTIONS(1), + [anon_sym_enum] = ACTIONS(1), + [anon_sym_struct] = ACTIONS(1), + [anon_sym_val] = ACTIONS(1), + [anon_sym_var] = ACTIONS(1), + [anon_sym_rust] = ACTIONS(1), + [anon_sym_python] = ACTIONS(1), + [anon_sym_mod] = ACTIONS(1), + [anon_sym_use] = ACTIONS(1), + [anon_sym_fun] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [sym_type_never] = ACTIONS(1), + [anon_sym__] = ACTIONS(1), + [anon_sym_or] = ACTIONS(1), + [anon_sym_return] = ACTIONS(1), + [anon_sym_break] = ACTIONS(1), + [anon_sym_continue] = ACTIONS(1), + [anon_sym_throw] = ACTIONS(1), + [anon_sym_from] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_where] = ACTIONS(1), + [anon_sym_join] = ACTIONS(1), + [anon_sym_on] = ACTIONS(1), + [anon_sym_union] = ACTIONS(1), + [anon_sym_group] = ACTIONS(1), + [anon_sym_over] = ACTIONS(1), + [anon_sym_roll] = ACTIONS(1), + [anon_sym_compute] = ACTIONS(1), + [anon_sym_select] = ACTIONS(1), + [anon_sym_with] = ACTIONS(1), + [anon_sym_into] = ACTIONS(1), + [anon_sym_order] = ACTIONS(1), + [anon_sym_desc] = ACTIONS(1), + [anon_sym_as] = ACTIONS(1), + [anon_sym_of] = ACTIONS(1), + [anon_sym_PLUS_EQ] = ACTIONS(1), + [anon_sym_DASH_EQ] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_DOT_DOT] = ACTIONS(1), + [anon_sym_DOT_DOT_EQ] = ACTIONS(1), + [anon_sym_and] = ACTIONS(1), + [anon_sym_EQ_EQ] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_not] = ACTIONS(1), + [anon_sym_COLON_COLON] = ACTIONS(1), + [anon_sym_DOT] = ACTIONS(1), + [anon_sym_do] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_match] = ACTIONS(1), + [anon_sym_loop] = ACTIONS(1), + [anon_sym_while] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_try] = ACTIONS(1), + [anon_sym_catch] = ACTIONS(1), + [anon_sym_finally] = ACTIONS(1), + [anon_sym_EQ_GT] = ACTIONS(1), + }, + [1] = { + [sym_program] = STATE(1566), + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(36), + [sym__stmt] = STATE(36), + [sym_stmt_def] = STATE(36), + [sym_stmt_type] = STATE(36), + [sym_stmt_enum] = STATE(36), + [sym_stmt_struct] = STATE(36), + [sym_stmt_val] = STATE(36), + [sym_stmt_var] = STATE(36), + [sym_stmt_expr] = STATE(36), + [sym_stmt_code] = STATE(36), + [sym_stmt_mod] = STATE(36), + [sym_stmt_use] = STATE(36), + [sym__stmt_noop] = STATE(36), + [sym__expr] = STATE(1050), + [sym_expr_return] = STATE(1050), + [sym_expr_break] = STATE(1050), + [sym_expr_continue] = STATE(1050), + [sym_expr_throw] = STATE(1050), + [sym_expr_query] = STATE(1050), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1050), + [sym_expr_binary] = STATE(1050), + [sym_expr_annot] = STATE(1050), + [sym_expr_call] = STATE(1050), + [sym_expr_tuple_access] = STATE(1050), + [sym_expr_record_access] = STATE(1050), + [sym_expr_array_access] = STATE(1050), + [sym_expr_method_call] = STATE(1050), + [sym_expr_record_variant] = STATE(1050), + [sym_expr_paren] = STATE(1050), + [sym_expr_constant] = STATE(1050), + [sym_expr_name] = STATE(1050), + [sym_expr_array] = STATE(1050), + [sym_expr_tuple] = STATE(1050), + [sym_expr_record] = STATE(1050), + [sym_expr_do] = STATE(1050), + [sym_expr_if] = STATE(1050), + [sym_expr_match] = STATE(1050), + [sym_expr_loop] = STATE(1050), + [sym_expr_while] = STATE(1050), + [sym_expr_for] = STATE(1050), + [sym_expr_try] = STATE(1050), + [ts_builtin_sym_end] = ACTIONS(5), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(29), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [2] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(545), + [sym_expr_return] = STATE(545), + [sym_expr_break] = STATE(545), + [sym_expr_continue] = STATE(545), + [sym_expr_throw] = STATE(545), + [sym_expr_query] = STATE(545), + [sym_query_from] = STATE(67), + [sym_expr_fun] = STATE(545), + [sym_expr_binary] = STATE(545), + [sym_expr_annot] = STATE(545), + [sym_expr_call] = STATE(545), + [sym_expr_tuple_access] = STATE(545), + [sym_expr_record_access] = STATE(545), + [sym_expr_array_access] = STATE(545), + [sym_expr_method_call] = STATE(545), + [sym_expr_record_variant] = STATE(545), + [sym_expr_paren] = STATE(545), + [sym_expr_constant] = STATE(545), + [sym_expr_name] = STATE(545), + [sym_expr_array] = STATE(545), + [sym_expr_tuple] = STATE(545), + [sym_expr_record] = STATE(545), + [sym_expr_do] = STATE(545), + [sym_expr_if] = STATE(545), + [sym_expr_match] = STATE(545), + [sym_expr_loop] = STATE(545), + [sym_expr_while] = STATE(545), + [sym_expr_for] = STATE(545), + [sym_expr_try] = STATE(545), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(91), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(93), + [anon_sym_break] = ACTIONS(95), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(99), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_of] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [3] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(541), + [sym_expr_return] = STATE(541), + [sym_expr_break] = STATE(541), + [sym_expr_continue] = STATE(541), + [sym_expr_throw] = STATE(541), + [sym_expr_query] = STATE(541), + [sym_query_from] = STATE(67), + [sym_expr_fun] = STATE(541), + [sym_expr_binary] = STATE(541), + [sym_expr_annot] = STATE(541), + [sym_expr_call] = STATE(541), + [sym_expr_tuple_access] = STATE(541), + [sym_expr_record_access] = STATE(541), + [sym_expr_array_access] = STATE(541), + [sym_expr_method_call] = STATE(541), + [sym_expr_record_variant] = STATE(541), + [sym_expr_paren] = STATE(541), + [sym_expr_constant] = STATE(541), + [sym_expr_name] = STATE(541), + [sym_expr_array] = STATE(541), + [sym_expr_tuple] = STATE(541), + [sym_expr_record] = STATE(541), + [sym_expr_do] = STATE(541), + [sym_expr_if] = STATE(541), + [sym_expr_match] = STATE(541), + [sym_expr_loop] = STATE(541), + [sym_expr_while] = STATE(541), + [sym_expr_for] = STATE(541), + [sym_expr_try] = STATE(541), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(91), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(93), + [anon_sym_break] = ACTIONS(95), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(99), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_of] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [4] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(564), + [sym_expr_return] = STATE(564), + [sym_expr_break] = STATE(564), + [sym_expr_continue] = STATE(564), + [sym_expr_throw] = STATE(564), + [sym_expr_query] = STATE(564), + [sym_query_from] = STATE(75), + [sym_expr_fun] = STATE(564), + [sym_expr_binary] = STATE(564), + [sym_expr_annot] = STATE(564), + [sym_expr_call] = STATE(564), + [sym_expr_tuple_access] = STATE(564), + [sym_expr_record_access] = STATE(564), + [sym_expr_array_access] = STATE(564), + [sym_expr_method_call] = STATE(564), + [sym_expr_record_variant] = STATE(564), + [sym_expr_paren] = STATE(564), + [sym_expr_constant] = STATE(564), + [sym_expr_name] = STATE(564), + [sym_expr_array] = STATE(564), + [sym_expr_tuple] = STATE(564), + [sym_expr_record] = STATE(564), + [sym_expr_do] = STATE(564), + [sym_expr_if] = STATE(564), + [sym_expr_match] = STATE(564), + [sym_expr_loop] = STATE(564), + [sym_expr_while] = STATE(564), + [sym_expr_for] = STATE(564), + [sym_expr_try] = STATE(564), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(119), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(121), + [anon_sym_break] = ACTIONS(123), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(125), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [5] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(553), + [sym_expr_return] = STATE(553), + [sym_expr_break] = STATE(553), + [sym_expr_continue] = STATE(553), + [sym_expr_throw] = STATE(553), + [sym_expr_query] = STATE(553), + [sym_query_from] = STATE(71), + [sym_expr_fun] = STATE(553), + [sym_expr_binary] = STATE(553), + [sym_expr_annot] = STATE(553), + [sym_expr_call] = STATE(553), + [sym_expr_tuple_access] = STATE(553), + [sym_expr_record_access] = STATE(553), + [sym_expr_array_access] = STATE(553), + [sym_expr_method_call] = STATE(553), + [sym_expr_record_variant] = STATE(553), + [sym_expr_paren] = STATE(553), + [sym_expr_constant] = STATE(553), + [sym_expr_name] = STATE(553), + [sym_expr_array] = STATE(553), + [sym_expr_tuple] = STATE(553), + [sym_expr_record] = STATE(553), + [sym_expr_do] = STATE(553), + [sym_expr_if] = STATE(553), + [sym_expr_match] = STATE(553), + [sym_expr_loop] = STATE(553), + [sym_expr_while] = STATE(553), + [sym_expr_for] = STATE(553), + [sym_expr_try] = STATE(553), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(127), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(129), + [anon_sym_break] = ACTIONS(131), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(133), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_of] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [6] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(552), + [sym_expr_return] = STATE(552), + [sym_expr_break] = STATE(552), + [sym_expr_continue] = STATE(552), + [sym_expr_throw] = STATE(552), + [sym_expr_query] = STATE(552), + [sym_query_from] = STATE(71), + [sym_expr_fun] = STATE(552), + [sym_expr_binary] = STATE(552), + [sym_expr_annot] = STATE(552), + [sym_expr_call] = STATE(552), + [sym_expr_tuple_access] = STATE(552), + [sym_expr_record_access] = STATE(552), + [sym_expr_array_access] = STATE(552), + [sym_expr_method_call] = STATE(552), + [sym_expr_record_variant] = STATE(552), + [sym_expr_paren] = STATE(552), + [sym_expr_constant] = STATE(552), + [sym_expr_name] = STATE(552), + [sym_expr_array] = STATE(552), + [sym_expr_tuple] = STATE(552), + [sym_expr_record] = STATE(552), + [sym_expr_do] = STATE(552), + [sym_expr_if] = STATE(552), + [sym_expr_match] = STATE(552), + [sym_expr_loop] = STATE(552), + [sym_expr_while] = STATE(552), + [sym_expr_for] = STATE(552), + [sym_expr_try] = STATE(552), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(127), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(129), + [anon_sym_break] = ACTIONS(131), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(133), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_of] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [7] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(567), + [sym_expr_return] = STATE(567), + [sym_expr_break] = STATE(567), + [sym_expr_continue] = STATE(567), + [sym_expr_throw] = STATE(567), + [sym_expr_query] = STATE(567), + [sym_query_from] = STATE(75), + [sym_expr_fun] = STATE(567), + [sym_expr_binary] = STATE(567), + [sym_expr_annot] = STATE(567), + [sym_expr_call] = STATE(567), + [sym_expr_tuple_access] = STATE(567), + [sym_expr_record_access] = STATE(567), + [sym_expr_array_access] = STATE(567), + [sym_expr_method_call] = STATE(567), + [sym_expr_record_variant] = STATE(567), + [sym_expr_paren] = STATE(567), + [sym_expr_constant] = STATE(567), + [sym_expr_name] = STATE(567), + [sym_expr_array] = STATE(567), + [sym_expr_tuple] = STATE(567), + [sym_expr_record] = STATE(567), + [sym_expr_do] = STATE(567), + [sym_expr_if] = STATE(567), + [sym_expr_match] = STATE(567), + [sym_expr_loop] = STATE(567), + [sym_expr_while] = STATE(567), + [sym_expr_for] = STATE(567), + [sym_expr_try] = STATE(567), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(119), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(121), + [anon_sym_break] = ACTIONS(123), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(125), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [8] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(605), + [sym_expr_return] = STATE(605), + [sym_expr_break] = STATE(605), + [sym_expr_continue] = STATE(605), + [sym_expr_throw] = STATE(605), + [sym_expr_query] = STATE(605), + [sym_query_from] = STATE(165), + [sym_expr_fun] = STATE(605), + [sym_expr_binary] = STATE(605), + [sym_expr_annot] = STATE(605), + [sym_expr_call] = STATE(605), + [sym_expr_tuple_access] = STATE(605), + [sym_expr_record_access] = STATE(605), + [sym_expr_array_access] = STATE(605), + [sym_expr_method_call] = STATE(605), + [sym_expr_record_variant] = STATE(605), + [sym_expr_paren] = STATE(605), + [sym_expr_constant] = STATE(605), + [sym_expr_name] = STATE(605), + [sym_expr_array] = STATE(605), + [sym_expr_tuple] = STATE(605), + [sym_expr_record] = STATE(605), + [sym_expr_do] = STATE(605), + [sym_expr_if] = STATE(605), + [sym_expr_match] = STATE(605), + [sym_expr_loop] = STATE(605), + [sym_expr_while] = STATE(605), + [sym_expr_for] = STATE(605), + [sym_expr_try] = STATE(605), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(135), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(137), + [anon_sym_break] = ACTIONS(139), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(141), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [9] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(621), + [sym_expr_return] = STATE(621), + [sym_expr_break] = STATE(621), + [sym_expr_continue] = STATE(621), + [sym_expr_throw] = STATE(621), + [sym_expr_query] = STATE(621), + [sym_query_from] = STATE(146), + [sym_expr_fun] = STATE(621), + [sym_expr_binary] = STATE(621), + [sym_expr_annot] = STATE(621), + [sym_expr_call] = STATE(621), + [sym_expr_tuple_access] = STATE(621), + [sym_expr_record_access] = STATE(621), + [sym_expr_array_access] = STATE(621), + [sym_expr_method_call] = STATE(621), + [sym_expr_record_variant] = STATE(621), + [sym_expr_paren] = STATE(621), + [sym_expr_constant] = STATE(621), + [sym_expr_name] = STATE(621), + [sym_expr_array] = STATE(621), + [sym_expr_tuple] = STATE(621), + [sym_expr_record] = STATE(621), + [sym_expr_do] = STATE(621), + [sym_expr_if] = STATE(621), + [sym_expr_match] = STATE(621), + [sym_expr_loop] = STATE(621), + [sym_expr_while] = STATE(621), + [sym_expr_for] = STATE(621), + [sym_expr_try] = STATE(621), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(143), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(145), + [anon_sym_break] = ACTIONS(147), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(149), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [10] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(606), + [sym_expr_return] = STATE(606), + [sym_expr_break] = STATE(606), + [sym_expr_continue] = STATE(606), + [sym_expr_throw] = STATE(606), + [sym_expr_query] = STATE(606), + [sym_query_from] = STATE(165), + [sym_expr_fun] = STATE(606), + [sym_expr_binary] = STATE(606), + [sym_expr_annot] = STATE(606), + [sym_expr_call] = STATE(606), + [sym_expr_tuple_access] = STATE(606), + [sym_expr_record_access] = STATE(606), + [sym_expr_array_access] = STATE(606), + [sym_expr_method_call] = STATE(606), + [sym_expr_record_variant] = STATE(606), + [sym_expr_paren] = STATE(606), + [sym_expr_constant] = STATE(606), + [sym_expr_name] = STATE(606), + [sym_expr_array] = STATE(606), + [sym_expr_tuple] = STATE(606), + [sym_expr_record] = STATE(606), + [sym_expr_do] = STATE(606), + [sym_expr_if] = STATE(606), + [sym_expr_match] = STATE(606), + [sym_expr_loop] = STATE(606), + [sym_expr_while] = STATE(606), + [sym_expr_for] = STATE(606), + [sym_expr_try] = STATE(606), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(135), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(137), + [anon_sym_break] = ACTIONS(139), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(141), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [11] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(620), + [sym_expr_return] = STATE(620), + [sym_expr_break] = STATE(620), + [sym_expr_continue] = STATE(620), + [sym_expr_throw] = STATE(620), + [sym_expr_query] = STATE(620), + [sym_query_from] = STATE(146), + [sym_expr_fun] = STATE(620), + [sym_expr_binary] = STATE(620), + [sym_expr_annot] = STATE(620), + [sym_expr_call] = STATE(620), + [sym_expr_tuple_access] = STATE(620), + [sym_expr_record_access] = STATE(620), + [sym_expr_array_access] = STATE(620), + [sym_expr_method_call] = STATE(620), + [sym_expr_record_variant] = STATE(620), + [sym_expr_paren] = STATE(620), + [sym_expr_constant] = STATE(620), + [sym_expr_name] = STATE(620), + [sym_expr_array] = STATE(620), + [sym_expr_tuple] = STATE(620), + [sym_expr_record] = STATE(620), + [sym_expr_do] = STATE(620), + [sym_expr_if] = STATE(620), + [sym_expr_match] = STATE(620), + [sym_expr_loop] = STATE(620), + [sym_expr_while] = STATE(620), + [sym_expr_for] = STATE(620), + [sym_expr_try] = STATE(620), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(143), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(145), + [anon_sym_break] = ACTIONS(147), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(149), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [12] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(630), + [sym_expr_return] = STATE(630), + [sym_expr_break] = STATE(630), + [sym_expr_continue] = STATE(630), + [sym_expr_throw] = STATE(630), + [sym_expr_query] = STATE(630), + [sym_query_from] = STATE(403), + [sym_expr_fun] = STATE(630), + [sym_expr_binary] = STATE(630), + [sym_expr_annot] = STATE(630), + [sym_expr_call] = STATE(630), + [sym_expr_tuple_access] = STATE(630), + [sym_expr_record_access] = STATE(630), + [sym_expr_array_access] = STATE(630), + [sym_expr_method_call] = STATE(630), + [sym_expr_record_variant] = STATE(630), + [sym_expr_paren] = STATE(630), + [sym_expr_constant] = STATE(630), + [sym_expr_name] = STATE(630), + [sym_expr_array] = STATE(630), + [sym_expr_tuple] = STATE(630), + [sym_expr_record] = STATE(630), + [sym_expr_do] = STATE(630), + [sym_expr_if] = STATE(630), + [sym_expr_match] = STATE(630), + [sym_expr_loop] = STATE(630), + [sym_expr_while] = STATE(630), + [sym_expr_for] = STATE(630), + [sym_expr_try] = STATE(630), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(151), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(153), + [anon_sym_break] = ACTIONS(155), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(157), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_on] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [13] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(631), + [sym_expr_return] = STATE(631), + [sym_expr_break] = STATE(631), + [sym_expr_continue] = STATE(631), + [sym_expr_throw] = STATE(631), + [sym_expr_query] = STATE(631), + [sym_query_from] = STATE(403), + [sym_expr_fun] = STATE(631), + [sym_expr_binary] = STATE(631), + [sym_expr_annot] = STATE(631), + [sym_expr_call] = STATE(631), + [sym_expr_tuple_access] = STATE(631), + [sym_expr_record_access] = STATE(631), + [sym_expr_array_access] = STATE(631), + [sym_expr_method_call] = STATE(631), + [sym_expr_record_variant] = STATE(631), + [sym_expr_paren] = STATE(631), + [sym_expr_constant] = STATE(631), + [sym_expr_name] = STATE(631), + [sym_expr_array] = STATE(631), + [sym_expr_tuple] = STATE(631), + [sym_expr_record] = STATE(631), + [sym_expr_do] = STATE(631), + [sym_expr_if] = STATE(631), + [sym_expr_match] = STATE(631), + [sym_expr_loop] = STATE(631), + [sym_expr_while] = STATE(631), + [sym_expr_for] = STATE(631), + [sym_expr_try] = STATE(631), + [sym_name] = ACTIONS(73), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(75), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(151), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(153), + [anon_sym_break] = ACTIONS(155), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(157), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_on] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [14] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(674), + [sym_expr_return] = STATE(674), + [sym_expr_break] = STATE(674), + [sym_expr_continue] = STATE(674), + [sym_expr_throw] = STATE(674), + [sym_expr_query] = STATE(674), + [sym_query_from] = STATE(407), + [sym_expr_fun] = STATE(674), + [sym_expr_binary] = STATE(674), + [sym_expr_annot] = STATE(674), + [sym_expr_call] = STATE(674), + [sym_expr_tuple_access] = STATE(674), + [sym_expr_record_access] = STATE(674), + [sym_expr_array_access] = STATE(674), + [sym_expr_method_call] = STATE(674), + [sym_expr_record_variant] = STATE(674), + [sym_expr_paren] = STATE(674), + [sym_expr_constant] = STATE(674), + [sym_expr_name] = STATE(674), + [sym_expr_array] = STATE(674), + [sym_expr_tuple] = STATE(674), + [sym_expr_record] = STATE(674), + [sym_expr_do] = STATE(674), + [sym_expr_if] = STATE(674), + [sym_expr_match] = STATE(674), + [sym_expr_loop] = STATE(674), + [sym_expr_while] = STATE(674), + [sym_expr_for] = STATE(674), + [sym_expr_try] = STATE(674), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(161), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(163), + [anon_sym_break] = ACTIONS(165), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(167), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_of] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [15] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(681), + [sym_expr_return] = STATE(681), + [sym_expr_break] = STATE(681), + [sym_expr_continue] = STATE(681), + [sym_expr_throw] = STATE(681), + [sym_expr_query] = STATE(681), + [sym_query_from] = STATE(407), + [sym_expr_fun] = STATE(681), + [sym_expr_binary] = STATE(681), + [sym_expr_annot] = STATE(681), + [sym_expr_call] = STATE(681), + [sym_expr_tuple_access] = STATE(681), + [sym_expr_record_access] = STATE(681), + [sym_expr_array_access] = STATE(681), + [sym_expr_method_call] = STATE(681), + [sym_expr_record_variant] = STATE(681), + [sym_expr_paren] = STATE(681), + [sym_expr_constant] = STATE(681), + [sym_expr_name] = STATE(681), + [sym_expr_array] = STATE(681), + [sym_expr_tuple] = STATE(681), + [sym_expr_record] = STATE(681), + [sym_expr_do] = STATE(681), + [sym_expr_if] = STATE(681), + [sym_expr_match] = STATE(681), + [sym_expr_loop] = STATE(681), + [sym_expr_while] = STATE(681), + [sym_expr_for] = STATE(681), + [sym_expr_try] = STATE(681), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(161), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(163), + [anon_sym_break] = ACTIONS(165), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(167), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_of] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [16] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(693), + [sym_expr_return] = STATE(693), + [sym_expr_break] = STATE(693), + [sym_expr_continue] = STATE(693), + [sym_expr_throw] = STATE(693), + [sym_expr_query] = STATE(693), + [sym_query_from] = STATE(410), + [sym_expr_fun] = STATE(693), + [sym_expr_binary] = STATE(693), + [sym_expr_annot] = STATE(693), + [sym_expr_call] = STATE(693), + [sym_expr_tuple_access] = STATE(693), + [sym_expr_record_access] = STATE(693), + [sym_expr_array_access] = STATE(693), + [sym_expr_method_call] = STATE(693), + [sym_expr_record_variant] = STATE(693), + [sym_expr_paren] = STATE(693), + [sym_expr_constant] = STATE(693), + [sym_expr_name] = STATE(693), + [sym_expr_array] = STATE(693), + [sym_expr_tuple] = STATE(693), + [sym_expr_record] = STATE(693), + [sym_expr_do] = STATE(693), + [sym_expr_if] = STATE(693), + [sym_expr_match] = STATE(693), + [sym_expr_loop] = STATE(693), + [sym_expr_while] = STATE(693), + [sym_expr_for] = STATE(693), + [sym_expr_try] = STATE(693), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(169), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(171), + [anon_sym_break] = ACTIONS(173), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(175), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [17] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(690), + [sym_expr_return] = STATE(690), + [sym_expr_break] = STATE(690), + [sym_expr_continue] = STATE(690), + [sym_expr_throw] = STATE(690), + [sym_expr_query] = STATE(690), + [sym_query_from] = STATE(410), + [sym_expr_fun] = STATE(690), + [sym_expr_binary] = STATE(690), + [sym_expr_annot] = STATE(690), + [sym_expr_call] = STATE(690), + [sym_expr_tuple_access] = STATE(690), + [sym_expr_record_access] = STATE(690), + [sym_expr_array_access] = STATE(690), + [sym_expr_method_call] = STATE(690), + [sym_expr_record_variant] = STATE(690), + [sym_expr_paren] = STATE(690), + [sym_expr_constant] = STATE(690), + [sym_expr_name] = STATE(690), + [sym_expr_array] = STATE(690), + [sym_expr_tuple] = STATE(690), + [sym_expr_record] = STATE(690), + [sym_expr_do] = STATE(690), + [sym_expr_if] = STATE(690), + [sym_expr_match] = STATE(690), + [sym_expr_loop] = STATE(690), + [sym_expr_while] = STATE(690), + [sym_expr_for] = STATE(690), + [sym_expr_try] = STATE(690), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(169), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(171), + [anon_sym_break] = ACTIONS(173), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(175), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [18] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(689), + [sym_expr_return] = STATE(689), + [sym_expr_break] = STATE(689), + [sym_expr_continue] = STATE(689), + [sym_expr_throw] = STATE(689), + [sym_expr_query] = STATE(689), + [sym_query_from] = STATE(414), + [sym_expr_fun] = STATE(689), + [sym_expr_binary] = STATE(689), + [sym_expr_annot] = STATE(689), + [sym_expr_call] = STATE(689), + [sym_expr_tuple_access] = STATE(689), + [sym_expr_record_access] = STATE(689), + [sym_expr_array_access] = STATE(689), + [sym_expr_method_call] = STATE(689), + [sym_expr_record_variant] = STATE(689), + [sym_expr_paren] = STATE(689), + [sym_expr_constant] = STATE(689), + [sym_expr_name] = STATE(689), + [sym_expr_array] = STATE(689), + [sym_expr_tuple] = STATE(689), + [sym_expr_record] = STATE(689), + [sym_expr_do] = STATE(689), + [sym_expr_if] = STATE(689), + [sym_expr_match] = STATE(689), + [sym_expr_loop] = STATE(689), + [sym_expr_while] = STATE(689), + [sym_expr_for] = STATE(689), + [sym_expr_try] = STATE(689), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(177), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(179), + [anon_sym_break] = ACTIONS(181), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(183), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_of] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [19] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(688), + [sym_expr_return] = STATE(688), + [sym_expr_break] = STATE(688), + [sym_expr_continue] = STATE(688), + [sym_expr_throw] = STATE(688), + [sym_expr_query] = STATE(688), + [sym_query_from] = STATE(414), + [sym_expr_fun] = STATE(688), + [sym_expr_binary] = STATE(688), + [sym_expr_annot] = STATE(688), + [sym_expr_call] = STATE(688), + [sym_expr_tuple_access] = STATE(688), + [sym_expr_record_access] = STATE(688), + [sym_expr_array_access] = STATE(688), + [sym_expr_method_call] = STATE(688), + [sym_expr_record_variant] = STATE(688), + [sym_expr_paren] = STATE(688), + [sym_expr_constant] = STATE(688), + [sym_expr_name] = STATE(688), + [sym_expr_array] = STATE(688), + [sym_expr_tuple] = STATE(688), + [sym_expr_record] = STATE(688), + [sym_expr_do] = STATE(688), + [sym_expr_if] = STATE(688), + [sym_expr_match] = STATE(688), + [sym_expr_loop] = STATE(688), + [sym_expr_while] = STATE(688), + [sym_expr_for] = STATE(688), + [sym_expr_try] = STATE(688), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(177), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(179), + [anon_sym_break] = ACTIONS(181), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(183), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_of] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [20] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(742), + [sym_expr_return] = STATE(742), + [sym_expr_break] = STATE(742), + [sym_expr_continue] = STATE(742), + [sym_expr_throw] = STATE(742), + [sym_expr_query] = STATE(742), + [sym_query_from] = STATE(417), + [sym_expr_fun] = STATE(742), + [sym_expr_binary] = STATE(742), + [sym_expr_annot] = STATE(742), + [sym_expr_call] = STATE(742), + [sym_expr_tuple_access] = STATE(742), + [sym_expr_record_access] = STATE(742), + [sym_expr_array_access] = STATE(742), + [sym_expr_method_call] = STATE(742), + [sym_expr_record_variant] = STATE(742), + [sym_expr_paren] = STATE(742), + [sym_expr_constant] = STATE(742), + [sym_expr_name] = STATE(742), + [sym_expr_array] = STATE(742), + [sym_expr_tuple] = STATE(742), + [sym_expr_record] = STATE(742), + [sym_expr_do] = STATE(742), + [sym_expr_if] = STATE(742), + [sym_expr_match] = STATE(742), + [sym_expr_loop] = STATE(742), + [sym_expr_while] = STATE(742), + [sym_expr_for] = STATE(742), + [sym_expr_try] = STATE(742), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(185), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(187), + [anon_sym_break] = ACTIONS(189), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(191), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_desc] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [21] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(727), + [sym_expr_return] = STATE(727), + [sym_expr_break] = STATE(727), + [sym_expr_continue] = STATE(727), + [sym_expr_throw] = STATE(727), + [sym_expr_query] = STATE(727), + [sym_query_from] = STATE(416), + [sym_expr_fun] = STATE(727), + [sym_expr_binary] = STATE(727), + [sym_expr_annot] = STATE(727), + [sym_expr_call] = STATE(727), + [sym_expr_tuple_access] = STATE(727), + [sym_expr_record_access] = STATE(727), + [sym_expr_array_access] = STATE(727), + [sym_expr_method_call] = STATE(727), + [sym_expr_record_variant] = STATE(727), + [sym_expr_paren] = STATE(727), + [sym_expr_constant] = STATE(727), + [sym_expr_name] = STATE(727), + [sym_expr_array] = STATE(727), + [sym_expr_tuple] = STATE(727), + [sym_expr_record] = STATE(727), + [sym_expr_do] = STATE(727), + [sym_expr_if] = STATE(727), + [sym_expr_match] = STATE(727), + [sym_expr_loop] = STATE(727), + [sym_expr_while] = STATE(727), + [sym_expr_for] = STATE(727), + [sym_expr_try] = STATE(727), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(193), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(195), + [anon_sym_break] = ACTIONS(197), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(199), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_as] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [22] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(747), + [sym_expr_return] = STATE(747), + [sym_expr_break] = STATE(747), + [sym_expr_continue] = STATE(747), + [sym_expr_throw] = STATE(747), + [sym_expr_query] = STATE(747), + [sym_query_from] = STATE(417), + [sym_expr_fun] = STATE(747), + [sym_expr_binary] = STATE(747), + [sym_expr_annot] = STATE(747), + [sym_expr_call] = STATE(747), + [sym_expr_tuple_access] = STATE(747), + [sym_expr_record_access] = STATE(747), + [sym_expr_array_access] = STATE(747), + [sym_expr_method_call] = STATE(747), + [sym_expr_record_variant] = STATE(747), + [sym_expr_paren] = STATE(747), + [sym_expr_constant] = STATE(747), + [sym_expr_name] = STATE(747), + [sym_expr_array] = STATE(747), + [sym_expr_tuple] = STATE(747), + [sym_expr_record] = STATE(747), + [sym_expr_do] = STATE(747), + [sym_expr_if] = STATE(747), + [sym_expr_match] = STATE(747), + [sym_expr_loop] = STATE(747), + [sym_expr_while] = STATE(747), + [sym_expr_for] = STATE(747), + [sym_expr_try] = STATE(747), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(185), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(187), + [anon_sym_break] = ACTIONS(189), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(191), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_desc] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [23] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(744), + [sym_expr_return] = STATE(744), + [sym_expr_break] = STATE(744), + [sym_expr_continue] = STATE(744), + [sym_expr_throw] = STATE(744), + [sym_expr_query] = STATE(744), + [sym_query_from] = STATE(416), + [sym_expr_fun] = STATE(744), + [sym_expr_binary] = STATE(744), + [sym_expr_annot] = STATE(744), + [sym_expr_call] = STATE(744), + [sym_expr_tuple_access] = STATE(744), + [sym_expr_record_access] = STATE(744), + [sym_expr_array_access] = STATE(744), + [sym_expr_method_call] = STATE(744), + [sym_expr_record_variant] = STATE(744), + [sym_expr_paren] = STATE(744), + [sym_expr_constant] = STATE(744), + [sym_expr_name] = STATE(744), + [sym_expr_array] = STATE(744), + [sym_expr_tuple] = STATE(744), + [sym_expr_record] = STATE(744), + [sym_expr_do] = STATE(744), + [sym_expr_if] = STATE(744), + [sym_expr_match] = STATE(744), + [sym_expr_loop] = STATE(744), + [sym_expr_while] = STATE(744), + [sym_expr_for] = STATE(744), + [sym_expr_try] = STATE(744), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(193), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(195), + [anon_sym_break] = ACTIONS(197), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(199), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_as] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [24] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(766), + [sym_expr_return] = STATE(766), + [sym_expr_break] = STATE(766), + [sym_expr_continue] = STATE(766), + [sym_expr_throw] = STATE(766), + [sym_expr_query] = STATE(766), + [sym_query_from] = STATE(425), + [sym_expr_fun] = STATE(766), + [sym_expr_binary] = STATE(766), + [sym_expr_annot] = STATE(766), + [sym_expr_call] = STATE(766), + [sym_expr_tuple_access] = STATE(766), + [sym_expr_record_access] = STATE(766), + [sym_expr_array_access] = STATE(766), + [sym_expr_method_call] = STATE(766), + [sym_expr_record_variant] = STATE(766), + [sym_expr_paren] = STATE(766), + [sym_expr_constant] = STATE(766), + [sym_expr_name] = STATE(766), + [sym_expr_array] = STATE(766), + [sym_expr_tuple] = STATE(766), + [sym_expr_record] = STATE(766), + [sym_expr_do] = STATE(766), + [sym_expr_if] = STATE(766), + [sym_expr_match] = STATE(766), + [sym_expr_loop] = STATE(766), + [sym_expr_while] = STATE(766), + [sym_expr_for] = STATE(766), + [sym_expr_try] = STATE(766), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(201), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(203), + [anon_sym_break] = ACTIONS(205), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(207), + [anon_sym_from] = ACTIONS(79), + [anon_sym_where] = ACTIONS(79), + [anon_sym_join] = ACTIONS(79), + [anon_sym_union] = ACTIONS(79), + [anon_sym_group] = ACTIONS(79), + [anon_sym_over] = ACTIONS(79), + [anon_sym_roll] = ACTIONS(79), + [anon_sym_compute] = ACTIONS(79), + [anon_sym_select] = ACTIONS(79), + [anon_sym_with] = ACTIONS(79), + [anon_sym_into] = ACTIONS(79), + [anon_sym_order] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [25] = { + [sym__constant] = STATE(472), + [sym_constant_string] = STATE(472), + [sym_constant_char] = STATE(472), + [sym_constant_bool] = STATE(472), + [sym_constant_unit] = STATE(472), + [sym__expr] = STATE(765), + [sym_expr_return] = STATE(765), + [sym_expr_break] = STATE(765), + [sym_expr_continue] = STATE(765), + [sym_expr_throw] = STATE(765), + [sym_expr_query] = STATE(765), + [sym_query_from] = STATE(425), + [sym_expr_fun] = STATE(765), + [sym_expr_binary] = STATE(765), + [sym_expr_annot] = STATE(765), + [sym_expr_call] = STATE(765), + [sym_expr_tuple_access] = STATE(765), + [sym_expr_record_access] = STATE(765), + [sym_expr_array_access] = STATE(765), + [sym_expr_method_call] = STATE(765), + [sym_expr_record_variant] = STATE(765), + [sym_expr_paren] = STATE(765), + [sym_expr_constant] = STATE(765), + [sym_expr_name] = STATE(765), + [sym_expr_array] = STATE(765), + [sym_expr_tuple] = STATE(765), + [sym_expr_record] = STATE(765), + [sym_expr_do] = STATE(765), + [sym_expr_if] = STATE(765), + [sym_expr_match] = STATE(765), + [sym_expr_loop] = STATE(765), + [sym_expr_while] = STATE(765), + [sym_expr_for] = STATE(765), + [sym_expr_try] = STATE(765), + [sym_name] = ACTIONS(159), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(81), + [sym_constant_float] = ACTIONS(83), + [sym_string_quote] = ACTIONS(85), + [anon_sym_SQUOTE] = ACTIONS(87), + [anon_sym_true] = ACTIONS(89), + [anon_sym_false] = ACTIONS(89), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(201), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(203), + [anon_sym_break] = ACTIONS(205), + [anon_sym_continue] = ACTIONS(97), + [anon_sym_throw] = ACTIONS(207), + [anon_sym_from] = ACTIONS(117), + [anon_sym_where] = ACTIONS(117), + [anon_sym_join] = ACTIONS(117), + [anon_sym_union] = ACTIONS(117), + [anon_sym_group] = ACTIONS(117), + [anon_sym_over] = ACTIONS(117), + [anon_sym_roll] = ACTIONS(117), + [anon_sym_compute] = ACTIONS(117), + [anon_sym_select] = ACTIONS(117), + [anon_sym_with] = ACTIONS(117), + [anon_sym_into] = ACTIONS(117), + [anon_sym_order] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(101), + [anon_sym_if] = ACTIONS(103), + [anon_sym_match] = ACTIONS(105), + [anon_sym_loop] = ACTIONS(107), + [anon_sym_while] = ACTIONS(109), + [anon_sym_for] = ACTIONS(111), + [anon_sym_try] = ACTIONS(113), + }, + [26] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(922), + [sym_expr_return] = STATE(922), + [sym_expr_break] = STATE(922), + [sym_expr_continue] = STATE(922), + [sym_expr_throw] = STATE(922), + [sym_expr_query] = STATE(922), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(922), + [sym_expr_binary] = STATE(922), + [sym_expr_annot] = STATE(922), + [sym_expr_call] = STATE(922), + [sym_expr_tuple_access] = STATE(922), + [sym_expr_record_access] = STATE(922), + [sym_expr_array_access] = STATE(922), + [sym_expr_method_call] = STATE(922), + [sym_expr_record_variant] = STATE(922), + [sym_expr_paren] = STATE(922), + [sym_expr_constant] = STATE(922), + [sym_expr_name] = STATE(922), + [sym_expr_array] = STATE(922), + [sym_expr_tuple] = STATE(922), + [sym_expr_record] = STATE(922), + [sym_expr_do] = STATE(922), + [sym_expr_if] = STATE(922), + [sym_expr_match] = STATE(922), + [sym_expr_loop] = STATE(922), + [sym_expr_while] = STATE(922), + [sym_expr_for] = STATE(922), + [sym_expr_try] = STATE(922), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(115), + [anon_sym_COMMA] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_RPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_RBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_SEMI] = ACTIONS(115), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_on] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [27] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(928), + [sym_expr_return] = STATE(928), + [sym_expr_break] = STATE(928), + [sym_expr_continue] = STATE(928), + [sym_expr_throw] = STATE(928), + [sym_expr_query] = STATE(928), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(928), + [sym_expr_binary] = STATE(928), + [sym_expr_annot] = STATE(928), + [sym_expr_call] = STATE(928), + [sym_expr_tuple_access] = STATE(928), + [sym_expr_record_access] = STATE(928), + [sym_expr_array_access] = STATE(928), + [sym_expr_method_call] = STATE(928), + [sym_expr_record_variant] = STATE(928), + [sym_expr_paren] = STATE(928), + [sym_expr_constant] = STATE(928), + [sym_expr_name] = STATE(928), + [sym_expr_array] = STATE(928), + [sym_expr_tuple] = STATE(928), + [sym_expr_record] = STATE(928), + [sym_expr_do] = STATE(928), + [sym_expr_if] = STATE(928), + [sym_expr_match] = STATE(928), + [sym_expr_loop] = STATE(928), + [sym_expr_while] = STATE(928), + [sym_expr_for] = STATE(928), + [sym_expr_try] = STATE(928), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(77), + [anon_sym_COMMA] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_RBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_SEMI] = ACTIONS(77), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_on] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [28] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1050), + [sym_expr_return] = STATE(1050), + [sym_expr_break] = STATE(1050), + [sym_expr_continue] = STATE(1050), + [sym_expr_throw] = STATE(1050), + [sym_expr_query] = STATE(1050), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1050), + [sym_expr_binary] = STATE(1050), + [sym_expr_annot] = STATE(1050), + [sym_expr_call] = STATE(1050), + [sym_expr_tuple_access] = STATE(1050), + [sym_expr_record_access] = STATE(1050), + [sym_expr_array_access] = STATE(1050), + [sym_expr_method_call] = STATE(1050), + [sym_expr_record_variant] = STATE(1050), + [sym_expr_paren] = STATE(1050), + [sym_expr_constant] = STATE(1050), + [sym_expr_name] = STATE(1050), + [sym_expr_array] = STATE(1050), + [sym_expr_tuple] = STATE(1050), + [sym_expr_record] = STATE(1050), + [sym_expr_do] = STATE(1050), + [sym_expr_if] = STATE(1050), + [sym_expr_match] = STATE(1050), + [sym_expr_loop] = STATE(1050), + [sym_expr_while] = STATE(1050), + [sym_expr_for] = STATE(1050), + [sym_expr_try] = STATE(1050), + [ts_builtin_sym_end] = ACTIONS(209), + [sym_name] = ACTIONS(211), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(214), + [anon_sym_LBRACE] = ACTIONS(217), + [anon_sym_RBRACE] = ACTIONS(209), + [sym_constant_int] = ACTIONS(220), + [sym_constant_float] = ACTIONS(223), + [sym_string_quote] = ACTIONS(226), + [anon_sym_SQUOTE] = ACTIONS(229), + [anon_sym_true] = ACTIONS(232), + [anon_sym_false] = ACTIONS(232), + [anon_sym_LPAREN] = ACTIONS(235), + [anon_sym_def] = ACTIONS(238), + [anon_sym_LBRACK] = ACTIONS(241), + [anon_sym_SEMI] = ACTIONS(244), + [anon_sym_type] = ACTIONS(247), + [anon_sym_enum] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(253), + [anon_sym_val] = ACTIONS(256), + [anon_sym_var] = ACTIONS(259), + [anon_sym_DASH_DASH_DASH] = ACTIONS(262), + [anon_sym_mod] = ACTIONS(265), + [anon_sym_use] = ACTIONS(268), + [anon_sym_fun] = ACTIONS(271), + [anon_sym_return] = ACTIONS(274), + [anon_sym_break] = ACTIONS(277), + [anon_sym_continue] = ACTIONS(280), + [anon_sym_throw] = ACTIONS(283), + [anon_sym_from] = ACTIONS(286), + [anon_sym_do] = ACTIONS(289), + [anon_sym_if] = ACTIONS(292), + [anon_sym_match] = ACTIONS(295), + [anon_sym_loop] = ACTIONS(298), + [anon_sym_while] = ACTIONS(301), + [anon_sym_for] = ACTIONS(304), + [anon_sym_try] = ACTIONS(307), + }, + [29] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1026), + [sym_expr_return] = STATE(1026), + [sym_expr_break] = STATE(1026), + [sym_expr_continue] = STATE(1026), + [sym_expr_throw] = STATE(1026), + [sym_expr_query] = STATE(1026), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1026), + [sym_expr_binary] = STATE(1026), + [sym_expr_annot] = STATE(1026), + [sym_expr_call] = STATE(1026), + [sym_expr_tuple_access] = STATE(1026), + [sym_expr_record_access] = STATE(1026), + [sym_expr_array_access] = STATE(1026), + [sym_expr_method_call] = STATE(1026), + [sym_expr_record_variant] = STATE(1026), + [sym_expr_paren] = STATE(1026), + [sym_expr_constant] = STATE(1026), + [sym_expr_name] = STATE(1026), + [sym_expr_array] = STATE(1026), + [sym_expr_tuple] = STATE(1026), + [sym_expr_record] = STATE(1026), + [sym_expr_do] = STATE(1026), + [sym_expr_if] = STATE(1026), + [sym_expr_match] = STATE(1026), + [sym_expr_loop] = STATE(1026), + [sym_expr_while] = STATE(1026), + [sym_expr_for] = STATE(1026), + [sym_expr_try] = STATE(1026), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(310), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [30] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(35), + [sym__stmt] = STATE(35), + [sym_stmt_def] = STATE(35), + [sym_stmt_type] = STATE(35), + [sym_stmt_enum] = STATE(35), + [sym_stmt_struct] = STATE(35), + [sym_stmt_val] = STATE(35), + [sym_stmt_var] = STATE(35), + [sym_stmt_expr] = STATE(35), + [sym_stmt_code] = STATE(35), + [sym_stmt_mod] = STATE(35), + [sym_stmt_use] = STATE(35), + [sym__stmt_noop] = STATE(35), + [sym__expr] = STATE(1050), + [sym_expr_return] = STATE(1050), + [sym_expr_break] = STATE(1050), + [sym_expr_continue] = STATE(1050), + [sym_expr_throw] = STATE(1050), + [sym_expr_query] = STATE(1050), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1050), + [sym_expr_binary] = STATE(1050), + [sym_expr_annot] = STATE(1050), + [sym_expr_call] = STATE(1050), + [sym_expr_tuple_access] = STATE(1050), + [sym_expr_record_access] = STATE(1050), + [sym_expr_array_access] = STATE(1050), + [sym_expr_method_call] = STATE(1050), + [sym_expr_record_variant] = STATE(1050), + [sym_expr_paren] = STATE(1050), + [sym_expr_constant] = STATE(1050), + [sym_expr_name] = STATE(1050), + [sym_expr_array] = STATE(1050), + [sym_expr_tuple] = STATE(1050), + [sym_expr_record] = STATE(1050), + [sym_expr_do] = STATE(1050), + [sym_expr_if] = STATE(1050), + [sym_expr_match] = STATE(1050), + [sym_expr_loop] = STATE(1050), + [sym_expr_while] = STATE(1050), + [sym_expr_for] = STATE(1050), + [sym_expr_try] = STATE(1050), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(314), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(316), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [31] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(33), + [sym__stmt] = STATE(33), + [sym_stmt_def] = STATE(33), + [sym_stmt_type] = STATE(33), + [sym_stmt_enum] = STATE(33), + [sym_stmt_struct] = STATE(33), + [sym_stmt_val] = STATE(33), + [sym_stmt_var] = STATE(33), + [sym_stmt_expr] = STATE(33), + [sym_stmt_code] = STATE(33), + [sym_stmt_mod] = STATE(33), + [sym_stmt_use] = STATE(33), + [sym__stmt_noop] = STATE(33), + [sym__expr] = STATE(1033), + [sym_expr_return] = STATE(1033), + [sym_expr_break] = STATE(1033), + [sym_expr_continue] = STATE(1033), + [sym_expr_throw] = STATE(1033), + [sym_expr_query] = STATE(1033), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1033), + [sym_expr_binary] = STATE(1033), + [sym_expr_annot] = STATE(1033), + [sym_expr_call] = STATE(1033), + [sym_expr_tuple_access] = STATE(1033), + [sym_expr_record_access] = STATE(1033), + [sym_expr_array_access] = STATE(1033), + [sym_expr_method_call] = STATE(1033), + [sym_expr_record_variant] = STATE(1033), + [sym_expr_paren] = STATE(1033), + [sym_expr_constant] = STATE(1033), + [sym_expr_name] = STATE(1033), + [sym_expr_array] = STATE(1033), + [sym_expr_tuple] = STATE(1033), + [sym_expr_record] = STATE(1033), + [sym_expr_do] = STATE(1033), + [sym_expr_if] = STATE(1033), + [sym_expr_match] = STATE(1033), + [sym_expr_loop] = STATE(1033), + [sym_expr_while] = STATE(1033), + [sym_expr_for] = STATE(1033), + [sym_expr_try] = STATE(1033), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(318), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(320), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [32] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1035), + [sym_expr_return] = STATE(1035), + [sym_expr_break] = STATE(1035), + [sym_expr_continue] = STATE(1035), + [sym_expr_throw] = STATE(1035), + [sym_expr_query] = STATE(1035), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1035), + [sym_expr_binary] = STATE(1035), + [sym_expr_annot] = STATE(1035), + [sym_expr_call] = STATE(1035), + [sym_expr_tuple_access] = STATE(1035), + [sym_expr_record_access] = STATE(1035), + [sym_expr_array_access] = STATE(1035), + [sym_expr_method_call] = STATE(1035), + [sym_expr_record_variant] = STATE(1035), + [sym_expr_paren] = STATE(1035), + [sym_expr_constant] = STATE(1035), + [sym_expr_name] = STATE(1035), + [sym_expr_array] = STATE(1035), + [sym_expr_tuple] = STATE(1035), + [sym_expr_record] = STATE(1035), + [sym_expr_do] = STATE(1035), + [sym_expr_if] = STATE(1035), + [sym_expr_match] = STATE(1035), + [sym_expr_loop] = STATE(1035), + [sym_expr_while] = STATE(1035), + [sym_expr_for] = STATE(1035), + [sym_expr_try] = STATE(1035), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(322), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [33] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1031), + [sym_expr_return] = STATE(1031), + [sym_expr_break] = STATE(1031), + [sym_expr_continue] = STATE(1031), + [sym_expr_throw] = STATE(1031), + [sym_expr_query] = STATE(1031), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1031), + [sym_expr_binary] = STATE(1031), + [sym_expr_annot] = STATE(1031), + [sym_expr_call] = STATE(1031), + [sym_expr_tuple_access] = STATE(1031), + [sym_expr_record_access] = STATE(1031), + [sym_expr_array_access] = STATE(1031), + [sym_expr_method_call] = STATE(1031), + [sym_expr_record_variant] = STATE(1031), + [sym_expr_paren] = STATE(1031), + [sym_expr_constant] = STATE(1031), + [sym_expr_name] = STATE(1031), + [sym_expr_array] = STATE(1031), + [sym_expr_tuple] = STATE(1031), + [sym_expr_record] = STATE(1031), + [sym_expr_do] = STATE(1031), + [sym_expr_if] = STATE(1031), + [sym_expr_match] = STATE(1031), + [sym_expr_loop] = STATE(1031), + [sym_expr_while] = STATE(1031), + [sym_expr_for] = STATE(1031), + [sym_expr_try] = STATE(1031), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(324), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [34] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(32), + [sym__stmt] = STATE(32), + [sym_stmt_def] = STATE(32), + [sym_stmt_type] = STATE(32), + [sym_stmt_enum] = STATE(32), + [sym_stmt_struct] = STATE(32), + [sym_stmt_val] = STATE(32), + [sym_stmt_var] = STATE(32), + [sym_stmt_expr] = STATE(32), + [sym_stmt_code] = STATE(32), + [sym_stmt_mod] = STATE(32), + [sym_stmt_use] = STATE(32), + [sym__stmt_noop] = STATE(32), + [sym__expr] = STATE(1007), + [sym_expr_return] = STATE(1007), + [sym_expr_break] = STATE(1007), + [sym_expr_continue] = STATE(1007), + [sym_expr_throw] = STATE(1007), + [sym_expr_query] = STATE(1007), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1007), + [sym_expr_binary] = STATE(1007), + [sym_expr_annot] = STATE(1007), + [sym_expr_call] = STATE(1007), + [sym_expr_tuple_access] = STATE(1007), + [sym_expr_record_access] = STATE(1007), + [sym_expr_array_access] = STATE(1007), + [sym_expr_method_call] = STATE(1007), + [sym_expr_record_variant] = STATE(1007), + [sym_expr_paren] = STATE(1007), + [sym_expr_constant] = STATE(1007), + [sym_expr_name] = STATE(1007), + [sym_expr_array] = STATE(1007), + [sym_expr_tuple] = STATE(1007), + [sym_expr_record] = STATE(1007), + [sym_expr_do] = STATE(1007), + [sym_expr_if] = STATE(1007), + [sym_expr_match] = STATE(1007), + [sym_expr_loop] = STATE(1007), + [sym_expr_while] = STATE(1007), + [sym_expr_for] = STATE(1007), + [sym_expr_try] = STATE(1007), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(326), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(328), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [35] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1050), + [sym_expr_return] = STATE(1050), + [sym_expr_break] = STATE(1050), + [sym_expr_continue] = STATE(1050), + [sym_expr_throw] = STATE(1050), + [sym_expr_query] = STATE(1050), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1050), + [sym_expr_binary] = STATE(1050), + [sym_expr_annot] = STATE(1050), + [sym_expr_call] = STATE(1050), + [sym_expr_tuple_access] = STATE(1050), + [sym_expr_record_access] = STATE(1050), + [sym_expr_array_access] = STATE(1050), + [sym_expr_method_call] = STATE(1050), + [sym_expr_record_variant] = STATE(1050), + [sym_expr_paren] = STATE(1050), + [sym_expr_constant] = STATE(1050), + [sym_expr_name] = STATE(1050), + [sym_expr_array] = STATE(1050), + [sym_expr_tuple] = STATE(1050), + [sym_expr_record] = STATE(1050), + [sym_expr_do] = STATE(1050), + [sym_expr_if] = STATE(1050), + [sym_expr_match] = STATE(1050), + [sym_expr_loop] = STATE(1050), + [sym_expr_while] = STATE(1050), + [sym_expr_for] = STATE(1050), + [sym_expr_try] = STATE(1050), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(330), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [36] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1050), + [sym_expr_return] = STATE(1050), + [sym_expr_break] = STATE(1050), + [sym_expr_continue] = STATE(1050), + [sym_expr_throw] = STATE(1050), + [sym_expr_query] = STATE(1050), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1050), + [sym_expr_binary] = STATE(1050), + [sym_expr_annot] = STATE(1050), + [sym_expr_call] = STATE(1050), + [sym_expr_tuple_access] = STATE(1050), + [sym_expr_record_access] = STATE(1050), + [sym_expr_array_access] = STATE(1050), + [sym_expr_method_call] = STATE(1050), + [sym_expr_record_variant] = STATE(1050), + [sym_expr_paren] = STATE(1050), + [sym_expr_constant] = STATE(1050), + [sym_expr_name] = STATE(1050), + [sym_expr_array] = STATE(1050), + [sym_expr_tuple] = STATE(1050), + [sym_expr_record] = STATE(1050), + [sym_expr_do] = STATE(1050), + [sym_expr_if] = STATE(1050), + [sym_expr_match] = STATE(1050), + [sym_expr_loop] = STATE(1050), + [sym_expr_while] = STATE(1050), + [sym_expr_for] = STATE(1050), + [sym_expr_try] = STATE(1050), + [ts_builtin_sym_end] = ACTIONS(332), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [37] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(28), + [sym__stmt] = STATE(28), + [sym_stmt_def] = STATE(28), + [sym_stmt_type] = STATE(28), + [sym_stmt_enum] = STATE(28), + [sym_stmt_struct] = STATE(28), + [sym_stmt_val] = STATE(28), + [sym_stmt_var] = STATE(28), + [sym_stmt_expr] = STATE(28), + [sym_stmt_code] = STATE(28), + [sym_stmt_mod] = STATE(28), + [sym_stmt_use] = STATE(28), + [sym__stmt_noop] = STATE(28), + [sym__expr] = STATE(1024), + [sym_expr_return] = STATE(1024), + [sym_expr_break] = STATE(1024), + [sym_expr_continue] = STATE(1024), + [sym_expr_throw] = STATE(1024), + [sym_expr_query] = STATE(1024), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1024), + [sym_expr_binary] = STATE(1024), + [sym_expr_annot] = STATE(1024), + [sym_expr_call] = STATE(1024), + [sym_expr_tuple_access] = STATE(1024), + [sym_expr_record_access] = STATE(1024), + [sym_expr_array_access] = STATE(1024), + [sym_expr_method_call] = STATE(1024), + [sym_expr_record_variant] = STATE(1024), + [sym_expr_paren] = STATE(1024), + [sym_expr_constant] = STATE(1024), + [sym_expr_name] = STATE(1024), + [sym_expr_array] = STATE(1024), + [sym_expr_tuple] = STATE(1024), + [sym_expr_record] = STATE(1024), + [sym_expr_do] = STATE(1024), + [sym_expr_if] = STATE(1024), + [sym_expr_match] = STATE(1024), + [sym_expr_loop] = STATE(1024), + [sym_expr_while] = STATE(1024), + [sym_expr_for] = STATE(1024), + [sym_expr_try] = STATE(1024), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(334), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(312), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [38] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(37), + [sym__stmt] = STATE(37), + [sym_stmt_def] = STATE(37), + [sym_stmt_type] = STATE(37), + [sym_stmt_enum] = STATE(37), + [sym_stmt_struct] = STATE(37), + [sym_stmt_val] = STATE(37), + [sym_stmt_var] = STATE(37), + [sym_stmt_expr] = STATE(37), + [sym_stmt_code] = STATE(37), + [sym_stmt_mod] = STATE(37), + [sym_stmt_use] = STATE(37), + [sym__stmt_noop] = STATE(37), + [sym__expr] = STATE(1025), + [sym_expr_return] = STATE(1025), + [sym_expr_break] = STATE(1025), + [sym_expr_continue] = STATE(1025), + [sym_expr_throw] = STATE(1025), + [sym_expr_query] = STATE(1025), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1025), + [sym_expr_binary] = STATE(1025), + [sym_expr_annot] = STATE(1025), + [sym_expr_call] = STATE(1025), + [sym_expr_tuple_access] = STATE(1025), + [sym_expr_record_access] = STATE(1025), + [sym_expr_array_access] = STATE(1025), + [sym_expr_method_call] = STATE(1025), + [sym_expr_record_variant] = STATE(1025), + [sym_expr_paren] = STATE(1025), + [sym_expr_constant] = STATE(1025), + [sym_expr_name] = STATE(1025), + [sym_expr_array] = STATE(1025), + [sym_expr_tuple] = STATE(1025), + [sym_expr_record] = STATE(1025), + [sym_expr_do] = STATE(1025), + [sym_expr_if] = STATE(1025), + [sym_expr_match] = STATE(1025), + [sym_expr_loop] = STATE(1025), + [sym_expr_while] = STATE(1025), + [sym_expr_for] = STATE(1025), + [sym_expr_try] = STATE(1025), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(336), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(338), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [39] = { + [sym_meta] = STATE(1185), + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [aux_sym__stmts] = STATE(29), + [sym__stmt] = STATE(29), + [sym_stmt_def] = STATE(29), + [sym_stmt_type] = STATE(29), + [sym_stmt_enum] = STATE(29), + [sym_stmt_struct] = STATE(29), + [sym_stmt_val] = STATE(29), + [sym_stmt_var] = STATE(29), + [sym_stmt_expr] = STATE(29), + [sym_stmt_code] = STATE(29), + [sym_stmt_mod] = STATE(29), + [sym_stmt_use] = STATE(29), + [sym__stmt_noop] = STATE(29), + [sym__expr] = STATE(1005), + [sym_expr_return] = STATE(1005), + [sym_expr_break] = STATE(1005), + [sym_expr_continue] = STATE(1005), + [sym_expr_throw] = STATE(1005), + [sym_expr_query] = STATE(1005), + [sym_query_from] = STATE(402), + [sym_expr_fun] = STATE(1005), + [sym_expr_binary] = STATE(1005), + [sym_expr_annot] = STATE(1005), + [sym_expr_call] = STATE(1005), + [sym_expr_tuple_access] = STATE(1005), + [sym_expr_record_access] = STATE(1005), + [sym_expr_array_access] = STATE(1005), + [sym_expr_method_call] = STATE(1005), + [sym_expr_record_variant] = STATE(1005), + [sym_expr_paren] = STATE(1005), + [sym_expr_constant] = STATE(1005), + [sym_expr_name] = STATE(1005), + [sym_expr_array] = STATE(1005), + [sym_expr_tuple] = STATE(1005), + [sym_expr_record] = STATE(1005), + [sym_expr_do] = STATE(1005), + [sym_expr_if] = STATE(1005), + [sym_expr_match] = STATE(1005), + [sym_expr_loop] = STATE(1005), + [sym_expr_while] = STATE(1005), + [sym_expr_for] = STATE(1005), + [sym_expr_try] = STATE(1005), + [sym_name] = ACTIONS(7), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(9), + [anon_sym_LBRACE] = ACTIONS(11), + [anon_sym_RBRACE] = ACTIONS(340), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(23), + [anon_sym_def] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(342), + [anon_sym_type] = ACTIONS(31), + [anon_sym_enum] = ACTIONS(33), + [anon_sym_struct] = ACTIONS(35), + [anon_sym_val] = ACTIONS(37), + [anon_sym_var] = ACTIONS(39), + [anon_sym_DASH_DASH_DASH] = ACTIONS(41), + [anon_sym_mod] = ACTIONS(43), + [anon_sym_use] = ACTIONS(45), + [anon_sym_fun] = ACTIONS(47), + [anon_sym_return] = ACTIONS(49), + [anon_sym_break] = ACTIONS(51), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(55), + [anon_sym_from] = ACTIONS(57), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [40] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(1028), + [sym_expr_return] = STATE(1028), + [sym_expr_break] = STATE(1028), + [sym_expr_continue] = STATE(1028), + [sym_expr_throw] = STATE(1028), + [sym_expr_query] = STATE(1028), + [sym_query_from] = STATE(421), + [sym_expr_fun] = STATE(1028), + [sym_expr_binary] = STATE(1028), + [sym_expr_annot] = STATE(1028), + [sym_expr_call] = STATE(1028), + [sym_expr_tuple_access] = STATE(1028), + [sym_expr_record_access] = STATE(1028), + [sym_expr_array_access] = STATE(1028), + [sym_expr_method_call] = STATE(1028), + [sym_expr_record_variant] = STATE(1028), + [sym_expr_paren] = STATE(1028), + [sym_expr_constant] = STATE(1028), + [sym_expr_name] = STATE(1028), + [sym_expr_array] = STATE(1028), + [sym_expr_tuple] = STATE(1028), + [sym_expr_record] = STATE(1028), + [sym_expr_do] = STATE(1028), + [sym_expr_if] = STATE(1028), + [sym_expr_match] = STATE(1028), + [sym_expr_loop] = STATE(1028), + [sym_expr_while] = STATE(1028), + [sym_expr_for] = STATE(1028), + [sym_expr_try] = STATE(1028), + [sym_name] = ACTIONS(344), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(346), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(348), + [anon_sym_break] = ACTIONS(350), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(352), + [anon_sym_from] = ACTIONS(354), + [anon_sym_as] = ACTIONS(79), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [41] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(1029), + [sym_expr_return] = STATE(1029), + [sym_expr_break] = STATE(1029), + [sym_expr_continue] = STATE(1029), + [sym_expr_throw] = STATE(1029), + [sym_expr_query] = STATE(1029), + [sym_query_from] = STATE(421), + [sym_expr_fun] = STATE(1029), + [sym_expr_binary] = STATE(1029), + [sym_expr_annot] = STATE(1029), + [sym_expr_call] = STATE(1029), + [sym_expr_tuple_access] = STATE(1029), + [sym_expr_record_access] = STATE(1029), + [sym_expr_array_access] = STATE(1029), + [sym_expr_method_call] = STATE(1029), + [sym_expr_record_variant] = STATE(1029), + [sym_expr_paren] = STATE(1029), + [sym_expr_constant] = STATE(1029), + [sym_expr_name] = STATE(1029), + [sym_expr_array] = STATE(1029), + [sym_expr_tuple] = STATE(1029), + [sym_expr_record] = STATE(1029), + [sym_expr_do] = STATE(1029), + [sym_expr_if] = STATE(1029), + [sym_expr_match] = STATE(1029), + [sym_expr_loop] = STATE(1029), + [sym_expr_while] = STATE(1029), + [sym_expr_for] = STATE(1029), + [sym_expr_try] = STATE(1029), + [sym_name] = ACTIONS(344), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(346), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(348), + [anon_sym_break] = ACTIONS(350), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(352), + [anon_sym_from] = ACTIONS(354), + [anon_sym_as] = ACTIONS(117), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [42] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(1066), + [sym_expr_return] = STATE(1066), + [sym_expr_break] = STATE(1066), + [sym_expr_continue] = STATE(1066), + [sym_expr_throw] = STATE(1066), + [sym_expr_query] = STATE(1066), + [sym_query_from] = STATE(427), + [sym_expr_fun] = STATE(1066), + [sym_expr_binary] = STATE(1066), + [sym_expr_annot] = STATE(1066), + [sym_expr_call] = STATE(1066), + [sym_expr_tuple_access] = STATE(1066), + [sym_expr_record_access] = STATE(1066), + [sym_expr_array_access] = STATE(1066), + [sym_expr_method_call] = STATE(1066), + [sym_expr_record_variant] = STATE(1066), + [sym_expr_paren] = STATE(1066), + [sym_expr_constant] = STATE(1066), + [sym_expr_name] = STATE(1066), + [sym_expr_array] = STATE(1066), + [sym_expr_tuple] = STATE(1066), + [sym_expr_record] = STATE(1066), + [sym_expr_do] = STATE(1066), + [sym_expr_if] = STATE(1066), + [sym_expr_match] = STATE(1066), + [sym_expr_loop] = STATE(1066), + [sym_expr_while] = STATE(1066), + [sym_expr_for] = STATE(1066), + [sym_expr_try] = STATE(1066), + [sym_name] = ACTIONS(344), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(79), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(77), + [anon_sym_EQ] = ACTIONS(79), + [anon_sym_fun] = ACTIONS(356), + [anon_sym_or] = ACTIONS(79), + [anon_sym_return] = ACTIONS(358), + [anon_sym_break] = ACTIONS(360), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(362), + [anon_sym_from] = ACTIONS(364), + [anon_sym_PLUS_EQ] = ACTIONS(77), + [anon_sym_DASH_EQ] = ACTIONS(77), + [anon_sym_STAR_EQ] = ACTIONS(77), + [anon_sym_SLASH_EQ] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_DOT_DOT_EQ] = ACTIONS(77), + [anon_sym_and] = ACTIONS(79), + [anon_sym_EQ_EQ] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(77), + [anon_sym_LT] = ACTIONS(79), + [anon_sym_GT] = ACTIONS(79), + [anon_sym_LT_EQ] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(79), + [anon_sym_DASH] = ACTIONS(79), + [anon_sym_STAR] = ACTIONS(79), + [anon_sym_SLASH] = ACTIONS(79), + [anon_sym_COLON_COLON] = ACTIONS(77), + [anon_sym_DOT] = ACTIONS(79), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, + [43] = { + [sym__constant] = STATE(893), + [sym_constant_string] = STATE(893), + [sym_constant_char] = STATE(893), + [sym_constant_bool] = STATE(893), + [sym_constant_unit] = STATE(893), + [sym__expr] = STATE(1060), + [sym_expr_return] = STATE(1060), + [sym_expr_break] = STATE(1060), + [sym_expr_continue] = STATE(1060), + [sym_expr_throw] = STATE(1060), + [sym_expr_query] = STATE(1060), + [sym_query_from] = STATE(427), + [sym_expr_fun] = STATE(1060), + [sym_expr_binary] = STATE(1060), + [sym_expr_annot] = STATE(1060), + [sym_expr_call] = STATE(1060), + [sym_expr_tuple_access] = STATE(1060), + [sym_expr_record_access] = STATE(1060), + [sym_expr_array_access] = STATE(1060), + [sym_expr_method_call] = STATE(1060), + [sym_expr_record_variant] = STATE(1060), + [sym_expr_paren] = STATE(1060), + [sym_expr_constant] = STATE(1060), + [sym_expr_name] = STATE(1060), + [sym_expr_array] = STATE(1060), + [sym_expr_tuple] = STATE(1060), + [sym_expr_record] = STATE(1060), + [sym_expr_do] = STATE(1060), + [sym_expr_if] = STATE(1060), + [sym_expr_match] = STATE(1060), + [sym_expr_loop] = STATE(1060), + [sym_expr_while] = STATE(1060), + [sym_expr_for] = STATE(1060), + [sym_expr_try] = STATE(1060), + [sym_name] = ACTIONS(344), + [sym__whitespace] = ACTIONS(3), + [sym_line_comment] = ACTIONS(3), + [anon_sym_LBRACE] = ACTIONS(115), + [anon_sym_COLON] = ACTIONS(117), + [sym_constant_int] = ACTIONS(13), + [sym_constant_float] = ACTIONS(15), + [sym_string_quote] = ACTIONS(17), + [anon_sym_SQUOTE] = ACTIONS(19), + [anon_sym_true] = ACTIONS(21), + [anon_sym_false] = ACTIONS(21), + [anon_sym_LPAREN] = ACTIONS(115), + [anon_sym_LBRACK] = ACTIONS(115), + [anon_sym_EQ] = ACTIONS(117), + [anon_sym_fun] = ACTIONS(356), + [anon_sym_or] = ACTIONS(117), + [anon_sym_return] = ACTIONS(358), + [anon_sym_break] = ACTIONS(360), + [anon_sym_continue] = ACTIONS(53), + [anon_sym_throw] = ACTIONS(362), + [anon_sym_from] = ACTIONS(364), + [anon_sym_PLUS_EQ] = ACTIONS(115), + [anon_sym_DASH_EQ] = ACTIONS(115), + [anon_sym_STAR_EQ] = ACTIONS(115), + [anon_sym_SLASH_EQ] = ACTIONS(115), + [anon_sym_DOT_DOT] = ACTIONS(117), + [anon_sym_DOT_DOT_EQ] = ACTIONS(115), + [anon_sym_and] = ACTIONS(117), + [anon_sym_EQ_EQ] = ACTIONS(115), + [anon_sym_BANG_EQ] = ACTIONS(115), + [anon_sym_LT] = ACTIONS(117), + [anon_sym_GT] = ACTIONS(117), + [anon_sym_LT_EQ] = ACTIONS(115), + [anon_sym_GT_EQ] = ACTIONS(115), + [anon_sym_PLUS] = ACTIONS(117), + [anon_sym_DASH] = ACTIONS(117), + [anon_sym_STAR] = ACTIONS(117), + [anon_sym_SLASH] = ACTIONS(117), + [anon_sym_COLON_COLON] = ACTIONS(115), + [anon_sym_DOT] = ACTIONS(117), + [anon_sym_do] = ACTIONS(59), + [anon_sym_if] = ACTIONS(61), + [anon_sym_match] = ACTIONS(63), + [anon_sym_loop] = ACTIONS(65), + [anon_sym_while] = ACTIONS(67), + [anon_sym_for] = ACTIONS(69), + [anon_sym_try] = ACTIONS(71), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 30, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(368), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1306), 1, + sym_expr_field, + STATE(1563), 1, + sym__expr_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [125] = 30, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(370), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1306), 1, + sym_expr_field, + STATE(1478), 1, + sym__expr_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [250] = 30, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(372), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1306), 1, + sym_expr_field, + STATE(1511), 1, + sym__expr_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [375] = 30, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(374), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1306), 1, + sym_expr_field, + STATE(1459), 1, + sym__expr_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [500] = 29, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(376), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1369), 1, + sym_expr_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [622] = 29, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + ACTIONS(378), 1, + anon_sym_RBRACE, + STATE(402), 1, + sym_query_from, + STATE(1369), 1, + sym_expr_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [744] = 28, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(366), 1, + sym_name, + STATE(402), 1, + sym_query_from, + STATE(1369), 1, + sym_expr_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1402), 2, + sym_expr_field_expr, + sym_expr_field_name, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1078), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [863] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(380), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1491), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [981] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(54), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 34, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [1051] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(386), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1519), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1169] = 16, + ACTIONS(392), 1, + anon_sym_from, + ACTIONS(395), 1, + anon_sym_where, + ACTIONS(398), 1, + anon_sym_join, + ACTIONS(401), 1, + anon_sym_union, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(410), 1, + anon_sym_roll, + ACTIONS(413), 1, + anon_sym_compute, + ACTIONS(416), 1, + anon_sym_select, + ACTIONS(419), 1, + anon_sym_with, + ACTIONS(422), 1, + anon_sym_into, + ACTIONS(425), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(54), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 22, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [1263] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(428), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1499), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1381] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(430), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1469), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1499] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(432), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1430), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1617] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(434), 1, + anon_sym_RBRACK, + STATE(402), 1, + sym_query_from, + STATE(1467), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1735] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(436), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1483), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1853] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(438), 1, + anon_sym_RBRACK, + STATE(402), 1, + sym_query_from, + STATE(1555), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [1971] = 27, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(440), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(996), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2087] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(442), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1482), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2205] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(444), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1520), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2323] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(446), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1493), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2441] = 27, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(448), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(996), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2557] = 28, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(450), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + STATE(1461), 1, + sym__exprs, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(987), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2675] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(52), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 34, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [2745] = 27, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(456), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1011), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [2860] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(73), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 33, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [2929] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(74), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 33, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [2998] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(70), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 33, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [3067] = 27, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(458), 1, + anon_sym_RPAREN, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1008), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3182] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(460), 1, + anon_sym_from, + ACTIONS(463), 1, + anon_sym_where, + ACTIONS(466), 1, + anon_sym_join, + ACTIONS(469), 1, + anon_sym_union, + ACTIONS(472), 1, + anon_sym_roll, + ACTIONS(475), 1, + anon_sym_compute, + ACTIONS(478), 1, + anon_sym_select, + ACTIONS(481), 1, + anon_sym_with, + ACTIONS(484), 1, + anon_sym_into, + ACTIONS(487), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(73), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [3275] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(490), 1, + anon_sym_from, + ACTIONS(493), 1, + anon_sym_where, + ACTIONS(496), 1, + anon_sym_join, + ACTIONS(499), 1, + anon_sym_union, + ACTIONS(502), 1, + anon_sym_roll, + ACTIONS(505), 1, + anon_sym_compute, + ACTIONS(508), 1, + anon_sym_select, + ACTIONS(511), 1, + anon_sym_with, + ACTIONS(514), 1, + anon_sym_into, + ACTIONS(517), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(74), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [3368] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(69), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 33, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [3437] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(611), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3549] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(550), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3661] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(444), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3773] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(447), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3885] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1053), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [3997] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1003), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4109] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(559), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4221] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(560), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4333] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(667), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4445] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(706), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4557] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(694), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4669] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(661), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4781] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(571), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [4893] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(530), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5005] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(522), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5117] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1072), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5229] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(445), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5341] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(709), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5453] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1069), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5565] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1037), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5677] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(933), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5789] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(430), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [5901] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(915), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6013] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(941), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6125] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(940), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6237] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(939), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6349] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(938), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6461] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(872), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6573] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(566), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6685] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(692), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6797] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(627), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [6909] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(917), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7021] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(644), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7133] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(993), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7245] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1036), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7357] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(505), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7469] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(504), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7581] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(573), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7693] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(533), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7805] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(645), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [7917] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(609), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8029] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(664), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8141] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(534), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8253] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8365] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(535), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8477] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(536), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8589] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(538), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8701] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(540), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8813] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1022), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [8925] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(543), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9037] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(544), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9149] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(537), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9261] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(663), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9373] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(449), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9485] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(450), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9597] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(647), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9709] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(713), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9821] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(625), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [9933] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1044), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10045] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(623), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10157] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10269] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(622), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10381] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(616), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10493] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(615), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10605] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(612), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10717] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(590), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10829] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(610), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [10941] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(624), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11053] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(558), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11165] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(539), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11277] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(148), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 32, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [11345] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(646), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11457] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(211), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 32, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [11525] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(601), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11637] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(600), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11749] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11861] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1038), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [11973] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(599), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12085] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(598), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12197] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(597), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12309] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(595), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12421] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1067), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12533] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(591), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12645] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(592), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12757] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(608), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12869] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(557), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [12981] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(714), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13093] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(704), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13205] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(629), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13317] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(174), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 32, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [13385] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1056), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13497] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(555), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13609] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(554), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13721] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(757), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13833] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(568), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [13945] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1032), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14057] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1068), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14169] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(582), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14281] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(215), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 32, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [14349] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(587), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14461] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(588), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14573] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14685] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(589), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14797] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(569), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [14909] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(585), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15021] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(586), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15133] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(584), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15245] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(583), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15357] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(551), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15469] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1030), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15581] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1006), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15693] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1016), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15805] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(581), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [15917] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(580), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16029] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(579), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16141] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(577), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16253] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(575), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16365] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16477] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1027), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16589] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1040), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16701] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(760), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16813] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1009), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [16925] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1010), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17037] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(572), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17149] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(593), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17261] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1015), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17373] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1013), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17485] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(596), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17597] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(649), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17709] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(604), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17821] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1054), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [17933] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(607), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18045] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(656), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18157] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1052), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18269] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(654), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18381] = 16, + ACTIONS(540), 1, + anon_sym_from, + ACTIONS(543), 1, + anon_sym_where, + ACTIONS(546), 1, + anon_sym_join, + ACTIONS(549), 1, + anon_sym_union, + ACTIONS(552), 1, + anon_sym_group, + ACTIONS(555), 1, + anon_sym_over, + ACTIONS(558), 1, + anon_sym_roll, + ACTIONS(561), 1, + anon_sym_compute, + ACTIONS(564), 1, + anon_sym_select, + ACTIONS(567), 1, + anon_sym_with, + ACTIONS(570), 1, + anon_sym_into, + ACTIONS(573), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(211), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [18473] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1049), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18585] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(652), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18697] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(653), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [18809] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(576), 1, + anon_sym_from, + ACTIONS(579), 1, + anon_sym_where, + ACTIONS(582), 1, + anon_sym_join, + ACTIONS(585), 1, + anon_sym_union, + ACTIONS(588), 1, + anon_sym_roll, + ACTIONS(591), 1, + anon_sym_compute, + ACTIONS(594), 1, + anon_sym_select, + ACTIONS(597), 1, + anon_sym_with, + ACTIONS(600), 1, + anon_sym_into, + ACTIONS(603), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(215), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [18901] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(749), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19013] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(711), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19125] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1018), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19237] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(463), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19349] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(494), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19461] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(570), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19573] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1061), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19685] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1019), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19797] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(726), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [19909] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(673), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20021] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(660), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20133] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(669), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20245] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(676), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20357] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(679), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20469] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(527), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20581] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(872), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20693] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(670), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20805] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(466), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [20917] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(682), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21029] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(127), 1, + anon_sym_fun, + ACTIONS(129), 1, + anon_sym_return, + ACTIONS(131), 1, + anon_sym_break, + ACTIONS(133), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(530), 1, + anon_sym_from, + STATE(71), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(462), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21141] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(659), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21253] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1020), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21365] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21477] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(763), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21589] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(739), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21701] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(346), 1, + anon_sym_fun, + ACTIONS(348), 1, + anon_sym_return, + ACTIONS(350), 1, + anon_sym_break, + ACTIONS(352), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + STATE(421), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1021), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21813] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1043), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [21925] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(626), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22037] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(703), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22149] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22261] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(678), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22373] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(677), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22485] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(668), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22597] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(651), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22709] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(658), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22821] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(675), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [22933] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(672), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23045] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(666), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23157] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(648), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23269] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(738), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23381] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1042), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23493] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(671), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23605] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1073), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23717] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(736), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23829] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(767), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [23941] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(641), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24053] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(734), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24165] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(662), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24277] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(687), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24389] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(613), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24501] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(614), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24613] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1041), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24725] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(565), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24837] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(705), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [24949] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(618), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25061] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(768), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25173] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(728), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25285] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(702), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25397] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1074), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25509] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(562), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25621] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(602), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25733] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(563), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25845] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(756), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [25957] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(701), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26069] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(775), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26181] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1059), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26293] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(561), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26405] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1039), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26517] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1063), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26629] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(729), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26741] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(776), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26853] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(685), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [26965] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(650), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27077] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(655), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27189] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(777), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27301] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(574), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27413] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(779), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27525] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(578), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27637] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(603), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27749] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(700), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27861] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(699), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [27973] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1014), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28085] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(698), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28197] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1062), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28309] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1012), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28421] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(542), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28533] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1077), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28645] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28757] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(576), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28869] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(697), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [28981] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(926), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29093] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(135), 1, + anon_sym_fun, + ACTIONS(137), 1, + anon_sym_return, + ACTIONS(139), 1, + anon_sym_break, + ACTIONS(141), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(524), 1, + anon_sym_from, + STATE(165), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(594), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29205] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1045), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29317] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(733), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29429] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(617), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29541] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1071), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29653] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(751), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29765] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(642), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29877] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(750), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [29989] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(762), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30101] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(778), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30213] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30325] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(774), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30437] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(773), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30549] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(696), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30661] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(772), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30773] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(771), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30885] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(770), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [30997] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(769), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31109] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(717), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31221] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(201), 1, + anon_sym_fun, + ACTIONS(203), 1, + anon_sym_return, + ACTIONS(205), 1, + anon_sym_break, + ACTIONS(207), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(425), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(764), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31333] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1065), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31445] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(718), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31557] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(719), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31669] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(720), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31781] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(996), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [31893] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(758), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32005] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(721), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32117] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(633), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32229] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(723), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32341] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(143), 1, + anon_sym_fun, + ACTIONS(145), 1, + anon_sym_return, + ACTIONS(147), 1, + anon_sym_break, + ACTIONS(149), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(536), 1, + anon_sym_from, + STATE(146), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(619), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32453] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(634), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32565] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1058), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32677] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(695), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32789] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(683), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [32901] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(716), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33013] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(725), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33125] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(743), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33237] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(731), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33349] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33461] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(635), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33573] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(636), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33685] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(637), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33797] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(638), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [33909] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(639), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34021] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(640), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34133] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34245] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(708), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34357] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(707), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34469] = 26, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(151), 1, + anon_sym_fun, + ACTIONS(153), 1, + anon_sym_return, + ACTIONS(155), 1, + anon_sym_break, + ACTIONS(157), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(403), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(632), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34581] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(684), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34693] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(761), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34805] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(628), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [34917] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(722), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35029] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(735), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35141] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1048), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35253] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(737), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35365] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1070), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35477] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1075), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35589] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(935), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35701] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(741), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35813] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1057), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [35925] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1051), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36037] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1034), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36149] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(740), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36261] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1076), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36373] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(715), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36485] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(745), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36597] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(712), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36709] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(169), 1, + anon_sym_fun, + ACTIONS(171), 1, + anon_sym_return, + ACTIONS(173), 1, + anon_sym_break, + ACTIONS(175), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(534), 1, + anon_sym_from, + STATE(410), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(686), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36821] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(643), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [36933] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(177), 1, + anon_sym_fun, + ACTIONS(179), 1, + anon_sym_return, + ACTIONS(181), 1, + anon_sym_break, + ACTIONS(183), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(532), 1, + anon_sym_from, + STATE(414), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(710), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37045] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(508), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37157] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1055), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37269] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(872), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37381] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(746), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37493] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(546), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37605] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(732), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37717] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(752), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37829] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(547), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [37941] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1046), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38053] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(759), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38165] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(724), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38277] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(755), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38389] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(754), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38501] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(753), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38613] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(185), 1, + anon_sym_fun, + ACTIONS(187), 1, + anon_sym_return, + ACTIONS(189), 1, + anon_sym_break, + ACTIONS(191), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(606), 1, + anon_sym_from, + STATE(417), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(748), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38725] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(161), 1, + anon_sym_fun, + ACTIONS(163), 1, + anon_sym_return, + ACTIONS(165), 1, + anon_sym_break, + ACTIONS(167), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(538), 1, + anon_sym_from, + STATE(407), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(657), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38837] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(119), 1, + anon_sym_fun, + ACTIONS(121), 1, + anon_sym_return, + ACTIONS(123), 1, + anon_sym_break, + ACTIONS(125), 1, + anon_sym_throw, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(526), 1, + anon_sym_from, + STATE(75), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(532), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [38949] = 26, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(159), 1, + sym_name, + ACTIONS(193), 1, + anon_sym_fun, + ACTIONS(195), 1, + anon_sym_return, + ACTIONS(197), 1, + anon_sym_break, + ACTIONS(199), 1, + anon_sym_throw, + ACTIONS(354), 1, + anon_sym_from, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + STATE(416), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(730), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39061] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(548), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39173] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(549), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39285] = 26, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + ACTIONS(344), 1, + sym_name, + ACTIONS(356), 1, + anon_sym_fun, + ACTIONS(358), 1, + anon_sym_return, + ACTIONS(360), 1, + anon_sym_break, + ACTIONS(362), 1, + anon_sym_throw, + ACTIONS(364), 1, + anon_sym_from, + STATE(427), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1047), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39397] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(531), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39509] = 26, + ACTIONS(7), 1, + sym_name, + ACTIONS(11), 1, + anon_sym_LBRACE, + ACTIONS(13), 1, + sym_constant_int, + ACTIONS(15), 1, + sym_constant_float, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(23), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_fun, + ACTIONS(49), 1, + anon_sym_return, + ACTIONS(51), 1, + anon_sym_break, + ACTIONS(53), 1, + anon_sym_continue, + ACTIONS(55), 1, + anon_sym_throw, + ACTIONS(57), 1, + anon_sym_from, + ACTIONS(59), 1, + anon_sym_do, + ACTIONS(61), 1, + anon_sym_if, + ACTIONS(63), 1, + anon_sym_match, + ACTIONS(65), 1, + anon_sym_loop, + ACTIONS(67), 1, + anon_sym_while, + ACTIONS(69), 1, + anon_sym_for, + ACTIONS(71), 1, + anon_sym_try, + STATE(402), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(893), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1064), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39621] = 26, + ACTIONS(73), 1, + sym_name, + ACTIONS(75), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym_constant_int, + ACTIONS(83), 1, + sym_constant_float, + ACTIONS(85), 1, + sym_string_quote, + ACTIONS(87), 1, + anon_sym_SQUOTE, + ACTIONS(91), 1, + anon_sym_fun, + ACTIONS(93), 1, + anon_sym_return, + ACTIONS(95), 1, + anon_sym_break, + ACTIONS(97), 1, + anon_sym_continue, + ACTIONS(99), 1, + anon_sym_throw, + ACTIONS(101), 1, + anon_sym_do, + ACTIONS(103), 1, + anon_sym_if, + ACTIONS(105), 1, + anon_sym_match, + ACTIONS(107), 1, + anon_sym_loop, + ACTIONS(109), 1, + anon_sym_while, + ACTIONS(111), 1, + anon_sym_for, + ACTIONS(113), 1, + anon_sym_try, + ACTIONS(520), 1, + anon_sym_LPAREN, + ACTIONS(522), 1, + anon_sym_LBRACK, + ACTIONS(528), 1, + anon_sym_from, + STATE(67), 1, + sym_query_from, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(89), 2, + anon_sym_true, + anon_sym_false, + STATE(472), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(528), 28, + sym__expr, + sym_expr_return, + sym_expr_break, + sym_expr_continue, + sym_expr_throw, + sym_expr_query, + sym_expr_fun, + sym_expr_binary, + sym_expr_annot, + sym_expr_call, + sym_expr_tuple_access, + sym_expr_record_access, + sym_expr_array_access, + sym_expr_method_call, + sym_expr_record_variant, + sym_expr_paren, + sym_expr_constant, + sym_expr_name, + sym_expr_array, + sym_expr_tuple, + sym_expr_record, + sym_expr_do, + sym_expr_if, + sym_expr_match, + sym_expr_loop, + sym_expr_while, + sym_expr_for, + sym_expr_try, + [39733] = 16, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(620), 1, + anon_sym_roll, + ACTIONS(622), 1, + anon_sym_compute, + ACTIONS(624), 1, + anon_sym_select, + ACTIONS(626), 1, + anon_sym_with, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(630), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(405), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [39824] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(406), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 31, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [39891] = 16, + ACTIONS(552), 1, + anon_sym_group, + ACTIONS(555), 1, + anon_sym_over, + ACTIONS(632), 1, + anon_sym_from, + ACTIONS(635), 1, + anon_sym_where, + ACTIONS(638), 1, + anon_sym_join, + ACTIONS(641), 1, + anon_sym_union, + ACTIONS(644), 1, + anon_sym_roll, + ACTIONS(647), 1, + anon_sym_compute, + ACTIONS(650), 1, + anon_sym_select, + ACTIONS(653), 1, + anon_sym_with, + ACTIONS(656), 1, + anon_sym_into, + ACTIONS(659), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(404), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [39982] = 16, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(620), 1, + anon_sym_roll, + ACTIONS(622), 1, + anon_sym_compute, + ACTIONS(624), 1, + anon_sym_select, + ACTIONS(626), 1, + anon_sym_with, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(630), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(404), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40073] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(404), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 31, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40140] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(408), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 29, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40205] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(409), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 29, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40270] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(662), 1, + anon_sym_from, + ACTIONS(665), 1, + anon_sym_where, + ACTIONS(668), 1, + anon_sym_join, + ACTIONS(671), 1, + anon_sym_union, + ACTIONS(674), 1, + anon_sym_roll, + ACTIONS(677), 1, + anon_sym_compute, + ACTIONS(680), 1, + anon_sym_select, + ACTIONS(683), 1, + anon_sym_with, + ACTIONS(686), 1, + anon_sym_into, + ACTIONS(689), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(409), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 17, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40359] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(412), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 28, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40423] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(692), 1, + anon_sym_from, + ACTIONS(695), 1, + anon_sym_where, + ACTIONS(698), 1, + anon_sym_join, + ACTIONS(701), 1, + anon_sym_union, + ACTIONS(704), 1, + anon_sym_roll, + ACTIONS(707), 1, + anon_sym_compute, + ACTIONS(710), 1, + anon_sym_select, + ACTIONS(713), 1, + anon_sym_with, + ACTIONS(716), 1, + anon_sym_into, + ACTIONS(719), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(411), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 16, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40511] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(411), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 28, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40575] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(722), 1, + anon_sym_from, + ACTIONS(725), 1, + anon_sym_where, + ACTIONS(728), 1, + anon_sym_join, + ACTIONS(731), 1, + anon_sym_union, + ACTIONS(734), 1, + anon_sym_roll, + ACTIONS(737), 1, + anon_sym_compute, + ACTIONS(740), 1, + anon_sym_select, + ACTIONS(743), 1, + anon_sym_with, + ACTIONS(746), 1, + anon_sym_into, + ACTIONS(749), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(413), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 16, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40663] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(415), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 28, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40727] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(413), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 28, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40791] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(420), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 27, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40854] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(422), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 27, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [40917] = 16, + ACTIONS(752), 1, + anon_sym_from, + ACTIONS(754), 1, + anon_sym_where, + ACTIONS(756), 1, + anon_sym_join, + ACTIONS(758), 1, + anon_sym_union, + ACTIONS(760), 1, + anon_sym_group, + ACTIONS(762), 1, + anon_sym_over, + ACTIONS(764), 1, + anon_sym_roll, + ACTIONS(766), 1, + anon_sym_compute, + ACTIONS(768), 1, + anon_sym_select, + ACTIONS(770), 1, + anon_sym_with, + ACTIONS(772), 1, + anon_sym_into, + ACTIONS(774), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(419), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 15, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41004] = 16, + ACTIONS(404), 1, + anon_sym_group, + ACTIONS(407), 1, + anon_sym_over, + ACTIONS(776), 1, + anon_sym_from, + ACTIONS(779), 1, + anon_sym_where, + ACTIONS(782), 1, + anon_sym_join, + ACTIONS(785), 1, + anon_sym_union, + ACTIONS(788), 1, + anon_sym_roll, + ACTIONS(791), 1, + anon_sym_compute, + ACTIONS(794), 1, + anon_sym_select, + ACTIONS(797), 1, + anon_sym_with, + ACTIONS(800), 1, + anon_sym_into, + ACTIONS(803), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(419), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 15, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41091] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(419), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 27, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41154] = 16, + ACTIONS(752), 1, + anon_sym_from, + ACTIONS(754), 1, + anon_sym_where, + ACTIONS(756), 1, + anon_sym_join, + ACTIONS(758), 1, + anon_sym_union, + ACTIONS(760), 1, + anon_sym_group, + ACTIONS(762), 1, + anon_sym_over, + ACTIONS(764), 1, + anon_sym_roll, + ACTIONS(766), 1, + anon_sym_compute, + ACTIONS(768), 1, + anon_sym_select, + ACTIONS(770), 1, + anon_sym_with, + ACTIONS(772), 1, + anon_sym_into, + ACTIONS(774), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(418), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 15, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41241] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(423), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 27, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41304] = 16, + ACTIONS(552), 1, + anon_sym_group, + ACTIONS(555), 1, + anon_sym_over, + ACTIONS(806), 1, + anon_sym_from, + ACTIONS(809), 1, + anon_sym_where, + ACTIONS(812), 1, + anon_sym_join, + ACTIONS(815), 1, + anon_sym_union, + ACTIONS(818), 1, + anon_sym_roll, + ACTIONS(821), 1, + anon_sym_compute, + ACTIONS(824), 1, + anon_sym_select, + ACTIONS(827), 1, + anon_sym_with, + ACTIONS(830), 1, + anon_sym_into, + ACTIONS(833), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(423), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(388), 15, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41391] = 16, + ACTIONS(552), 1, + anon_sym_group, + ACTIONS(555), 1, + anon_sym_over, + ACTIONS(836), 1, + anon_sym_from, + ACTIONS(839), 1, + anon_sym_where, + ACTIONS(842), 1, + anon_sym_join, + ACTIONS(845), 1, + anon_sym_union, + ACTIONS(848), 1, + anon_sym_roll, + ACTIONS(851), 1, + anon_sym_compute, + ACTIONS(854), 1, + anon_sym_select, + ACTIONS(857), 1, + anon_sym_with, + ACTIONS(860), 1, + anon_sym_into, + ACTIONS(863), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(390), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(388), 14, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + STATE(424), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [41477] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(426), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(452), 26, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41539] = 4, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + STATE(424), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + ACTIONS(382), 26, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41601] = 16, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(866), 1, + anon_sym_from, + ACTIONS(868), 1, + anon_sym_where, + ACTIONS(870), 1, + anon_sym_join, + ACTIONS(872), 1, + anon_sym_union, + ACTIONS(874), 1, + anon_sym_roll, + ACTIONS(876), 1, + anon_sym_compute, + ACTIONS(878), 1, + anon_sym_select, + ACTIONS(880), 1, + anon_sym_with, + ACTIONS(882), 1, + anon_sym_into, + ACTIONS(884), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(454), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(452), 14, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + STATE(428), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [41687] = 16, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(866), 1, + anon_sym_from, + ACTIONS(868), 1, + anon_sym_where, + ACTIONS(870), 1, + anon_sym_join, + ACTIONS(872), 1, + anon_sym_union, + ACTIONS(874), 1, + anon_sym_roll, + ACTIONS(876), 1, + anon_sym_compute, + ACTIONS(878), 1, + anon_sym_select, + ACTIONS(880), 1, + anon_sym_with, + ACTIONS(882), 1, + anon_sym_into, + ACTIONS(884), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(384), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(382), 14, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + STATE(424), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [41773] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(888), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(886), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41829] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [41913] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(920), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(918), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [41969] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(924), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(922), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42025] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(928), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(926), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42081] = 4, + STATE(488), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(932), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(930), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42139] = 4, + STATE(491), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(936), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(934), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42197] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(940), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(938), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42253] = 4, + ACTIONS(946), 1, + anon_sym_else, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(944), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(942), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42311] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(950), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(948), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42367] = 4, + STATE(514), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(954), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(952), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42425] = 4, + STATE(524), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(958), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(956), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42483] = 4, + ACTIONS(964), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(962), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(960), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42541] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(968), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(966), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42597] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(972), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(970), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42653] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(976), 1, + anon_sym_of, + STATE(479), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [42741] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(978), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [42825] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(984), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(982), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [42881] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(976), 1, + anon_sym_of, + STATE(481), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(978), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [42969] = 4, + STATE(520), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(988), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(986), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43027] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(976), 1, + anon_sym_of, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(978), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [43113] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(976), 1, + anon_sym_of, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [43199] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(992), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(990), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43255] = 4, + ACTIONS(964), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(996), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(994), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43313] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1000), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(998), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43369] = 4, + STATE(503), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1004), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1002), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43427] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1008), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1006), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43483] = 4, + ACTIONS(964), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1012), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1010), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43541] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1016), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1014), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43597] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1020), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1018), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + [43653] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1024), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1022), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + [43709] = 4, + STATE(515), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1028), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1026), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [43767] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1032), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1030), 36, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + [43823] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [43906] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [43991] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1052), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1050), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44046] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1056), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1054), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44101] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [44184] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1060), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1058), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44239] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1064), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1062), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44294] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1068), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1066), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44349] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1072), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1070), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44404] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1076), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1074), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44459] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1080), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1078), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44514] = 4, + ACTIONS(1082), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1086), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1084), 34, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44571] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1090), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1088), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44626] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1094), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1092), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44681] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1098), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1096), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44736] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1102), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1100), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44791] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1106), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1104), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44846] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(514), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(954), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(952), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44905] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(954), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(952), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [44960] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(515), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1028), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1026), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45019] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1028), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1026), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45074] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1110), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1108), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45129] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1114), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1112), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45184] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1118), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1116), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45239] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1122), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1120), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45294] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1126), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1124), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45349] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(958), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(956), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45404] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(524), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(958), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(956), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45463] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1130), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1128), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45518] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(988), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(986), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45573] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(520), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(988), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(986), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45632] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1134), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1132), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45687] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [45772] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1138), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1136), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45827] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1142), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1140), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45882] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1146), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1144), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45937] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1150), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1148), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [45992] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1154), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1152), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46047] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1158), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1156), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46102] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1162), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1160), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46157] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1166), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1164), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46212] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1170), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1168), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46267] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + STATE(479), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [46354] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + STATE(481), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [46441] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1174), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1172), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46496] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1178), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1176), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46551] = 8, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 9, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 32, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [46616] = 5, + ACTIONS(1188), 1, + anon_sym_LPAREN, + ACTIONS(1190), 1, + anon_sym_COLON_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1186), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1184), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [46675] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1194), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1192), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46730] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1198), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1196), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46785] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1202), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1200), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46840] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1206), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1204), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46895] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1210), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1208), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [46950] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1214), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1212), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47005] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1218), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1216), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47060] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(491), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(936), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(934), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47119] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1222), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1220), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47174] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1226), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1224), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47229] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1230), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1228), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47284] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(488), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(932), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(930), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47343] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1232), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [47424] = 5, + ACTIONS(974), 1, + anon_sym_as, + STATE(503), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1004), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1002), 33, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47483] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1004), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1002), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47538] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1238), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1236), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47593] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1242), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1240), 35, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [47648] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1232), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [47728] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [47812] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [47896] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1256), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [47974] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [48058] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48138] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1276), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48216] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1280), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48294] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 31, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [48360] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 31, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [48428] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [48510] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 29, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [48582] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1256), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48662] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1180), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48740] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [48822] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [48904] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 27, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [48978] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [49060] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [49142] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [49226] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1300), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [49304] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [49388] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(900), 1, + anon_sym_or, + ACTIONS(902), 1, + anon_sym_and, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1246), 1, + anon_sym_EQ, + ACTIONS(1250), 1, + anon_sym_DOT_DOT, + ACTIONS(1252), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(904), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(906), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(908), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(910), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(912), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1248), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 21, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [49472] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [49555] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [49636] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [49717] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [49798] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [49881] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1300), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [49958] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [50041] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [50124] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [50207] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [50290] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [50373] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1300), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [50450] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [50533] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [50616] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [50697] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [50776] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [50855] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [50936] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [51017] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 30, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [51084] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1276), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [51161] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [51238] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1280), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [51315] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [51396] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [51479] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 30, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [51544] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [51627] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 30, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [51694] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1308), 1, + anon_sym_EQ, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1310), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [51777] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 28, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [51848] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [51925] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [51998] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1262), 1, + anon_sym_or, + ACTIONS(1264), 1, + anon_sym_and, + ACTIONS(1312), 1, + anon_sym_DOT_DOT, + ACTIONS(1314), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1266), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1268), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1270), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1272), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1274), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [52079] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [52160] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [52233] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 28, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [52304] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1180), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [52381] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1276), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [52458] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1280), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [52535] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 30, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [52600] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [52672] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 25, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [52744] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [52824] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [52906] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [52988] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [53064] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [53146] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 27, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [53216] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 29, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [53282] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 29, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [53346] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [53422] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [53498] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [53574] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [53656] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [53738] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [53818] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [53898] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [53980] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [54060] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [54138] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [54218] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [54300] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [54376] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [54458] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [54540] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 27, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [54610] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 29, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [54676] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [54752] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [54834] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 19, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [54916] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [54996] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [55076] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 29, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [55140] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [55216] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [55296] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [55372] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [55448] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 18, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [55529] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1392), 1, + anon_sym_of, + ACTIONS(1394), 1, + anon_sym_and, + STATE(481), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [55612] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 18, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [55693] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 22, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [55772] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 22, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [55851] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 22, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [55930] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56005] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56080] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 28, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [56143] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 28, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [56208] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 26, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [56277] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56352] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 24, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [56423] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 22, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [56502] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 18, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [56583] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 23, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56658] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1392), 1, + anon_sym_of, + ACTIONS(1394), 1, + anon_sym_and, + STATE(479), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56741] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 18, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [56822] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 18, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_on, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [56903] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [56982] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57061] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1392), 1, + anon_sym_of, + ACTIONS(1394), 1, + anon_sym_and, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57142] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1392), 1, + anon_sym_of, + ACTIONS(1394), 1, + anon_sym_and, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57223] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1408), 1, + anon_sym_of, + ACTIONS(1410), 1, + anon_sym_and, + STATE(479), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57305] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1408), 1, + anon_sym_of, + ACTIONS(1410), 1, + anon_sym_and, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57385] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + STATE(439), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(898), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(890), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57463] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57541] = 22, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + STATE(481), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(978), 13, + anon_sym_RBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [57629] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1408), 1, + anon_sym_of, + ACTIONS(1410), 1, + anon_sym_and, + STATE(481), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57711] = 22, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1034), 1, + anon_sym_or, + ACTIONS(1036), 1, + anon_sym_and, + ACTIONS(1048), 1, + anon_sym_of, + ACTIONS(1316), 1, + anon_sym_DOT_DOT, + ACTIONS(1318), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1320), 1, + anon_sym_EQ, + STATE(479), 1, + sym__of, + STATE(480), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1038), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1040), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1042), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1044), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1046), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1322), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(890), 13, + anon_sym_RBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [57799] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57875] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1408), 1, + anon_sym_of, + ACTIONS(1410), 1, + anon_sym_and, + STATE(460), 1, + sym__of, + STATE(482), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(980), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(978), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [57955] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58028] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58101] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58176] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [58253] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58328] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58401] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [58480] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58557] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [58632] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 24, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [58699] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [58778] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [58857] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [58934] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 22, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [59003] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [59082] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [59159] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [59232] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [59311] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 26, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [59374] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 26, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [59435] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1440), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1442), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 16, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + [59514] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1086), 11, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1084), 29, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [59563] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(1436), 1, + anon_sym_DOT_DOT, + ACTIONS(1438), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [59640] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1390), 1, + anon_sym_or, + ACTIONS(1394), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1396), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1398), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1400), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1402), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1404), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [59713] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [59787] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 23, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [59853] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [59929] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60005] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60081] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60157] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60233] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60309] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [60387] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [60459] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [60535] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [60613] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [60685] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [60757] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [60829] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 25, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [60889] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 25, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [60951] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 23, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [61017] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [61089] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [61157] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1234), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1232), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [61231] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [61309] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [61385] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [61457] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 25, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [61519] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 25, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [61579] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [61657] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [61735] = 20, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1324), 1, + anon_sym_or, + ACTIONS(1326), 1, + anon_sym_and, + ACTIONS(1348), 1, + anon_sym_DOT_DOT, + ACTIONS(1350), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1364), 1, + anon_sym_EQ, + STATE(477), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1328), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1330), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1332), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1334), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1366), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1232), 13, + anon_sym_RBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [61817] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [61893] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [61971] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1406), 1, + anon_sym_or, + ACTIONS(1410), 1, + anon_sym_and, + ACTIONS(1462), 1, + anon_sym_DOT_DOT, + ACTIONS(1464), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1466), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1412), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1414), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1416), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1418), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1420), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1468), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_of, + [62049] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [62117] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [62189] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [62267] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [62339] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [62417] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [62495] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [62573] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [62645] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1422), 1, + anon_sym_or, + ACTIONS(1424), 1, + anon_sym_and, + ACTIONS(1458), 1, + anon_sym_DOT_DOT, + ACTIONS(1460), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1470), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1426), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1428), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1430), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1432), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1434), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1472), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 15, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_as, + [62723] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1474), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1478), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [62800] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [62877] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [62948] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [63023] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1254), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [63100] = 16, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1258), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1256), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [63173] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [63248] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [63323] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [63398] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [63465] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [63536] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 20, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [63603] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 22, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [63668] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [63739] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 24, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [63800] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 24, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [63859] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 24, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [63920] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 22, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [63985] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [64060] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [64135] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [64210] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 24, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [64269] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [64340] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [64415] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1474), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1478), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [64492] = 19, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1288), 1, + anon_sym_desc, + ACTIONS(1352), 1, + anon_sym_EQ, + ACTIONS(1354), 1, + anon_sym_or, + ACTIONS(1358), 1, + anon_sym_DOT_DOT, + ACTIONS(1360), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1362), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1338), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1340), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1342), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1344), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1346), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1356), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1256), 13, + anon_sym_RBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [64571] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [64648] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [64719] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [64790] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [64861] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1474), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1478), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [64938] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1474), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1478), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [65015] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [65092] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [65163] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [65240] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1474), 1, + anon_sym_EQ, + ACTIONS(1476), 1, + anon_sym_or, + ACTIONS(1480), 1, + anon_sym_DOT_DOT, + ACTIONS(1482), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1484), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1486), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1488), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1490), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1492), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1494), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1478), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_desc, + [65317] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [65388] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1444), 1, + anon_sym_or, + ACTIONS(1446), 1, + anon_sym_and, + ACTIONS(1496), 1, + anon_sym_EQ, + ACTIONS(1500), 1, + anon_sym_DOT_DOT, + ACTIONS(1502), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1448), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1450), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1452), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1454), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1456), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1498), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 14, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_as, + [65465] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [65535] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1368), 1, + anon_sym_EQ, + ACTIONS(1370), 1, + anon_sym_or, + ACTIONS(1374), 1, + anon_sym_DOT_DOT, + ACTIONS(1376), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1378), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1380), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1382), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1384), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1386), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1388), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1372), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1300), 13, + anon_sym_RBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [65611] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 17, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [65685] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 17, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [65759] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 17, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [65833] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1522), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1524), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1298), 13, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [65909] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1302), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1300), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [65979] = 17, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 17, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [66053] = 13, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [66119] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [66189] = 12, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 3, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + ACTIONS(1180), 21, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [66253] = 10, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 5, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 23, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [66313] = 9, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 7, + anon_sym_EQ, + anon_sym_or, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 23, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [66371] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1522), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1524), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1304), 13, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [66447] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1522), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1524), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1306), 13, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [66523] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1522), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1524), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1244), 13, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [66599] = 15, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 18, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [66669] = 18, + ACTIONS(892), 1, + anon_sym_COLON, + ACTIONS(894), 1, + anon_sym_LPAREN, + ACTIONS(896), 1, + anon_sym_LBRACK, + ACTIONS(914), 1, + anon_sym_COLON_COLON, + ACTIONS(916), 1, + anon_sym_DOT, + ACTIONS(1504), 1, + anon_sym_or, + ACTIONS(1506), 1, + anon_sym_and, + ACTIONS(1518), 1, + anon_sym_DOT_DOT, + ACTIONS(1520), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1522), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1508), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1510), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1512), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1514), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1516), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1524), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + ACTIONS(1260), 13, + anon_sym_LBRACE, + anon_sym_from, + anon_sym_where, + anon_sym_join, + anon_sym_union, + anon_sym_group, + anon_sym_over, + anon_sym_roll, + anon_sym_compute, + anon_sym_select, + anon_sym_with, + anon_sym_into, + anon_sym_order, + [66745] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1526), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1528), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [66790] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1530), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1532), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [66835] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1534), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1536), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [66880] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1538), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1540), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [66925] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1542), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1544), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [66970] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1546), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1548), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67015] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1550), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1552), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67060] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1554), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1556), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67105] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1558), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1560), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67150] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1562), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1564), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67195] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1566), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1568), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67240] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1570), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1572), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67285] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1574), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1576), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67330] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1578), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1580), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67375] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1582), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1584), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67420] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1586), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1588), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67465] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1590), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1592), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67510] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1594), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1596), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67555] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1598), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1600), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67600] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1602), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1604), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67645] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1606), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1608), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67690] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1610), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1612), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67735] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1614), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1616), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67780] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1618), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1620), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67825] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1622), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1624), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67870] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1626), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1628), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67915] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1630), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1632), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [67960] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1634), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1636), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68005] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1638), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1640), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68050] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1642), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1644), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68095] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1646), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1648), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68140] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1650), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1652), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68185] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1654), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1656), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68230] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1658), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1660), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68275] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1662), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1664), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68320] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1666), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1668), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68365] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1018), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1020), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68410] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1670), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1672), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68455] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1022), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1024), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68500] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1674), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1676), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68545] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1678), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1680), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68590] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1682), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1684), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68635] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1686), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1688), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68680] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1690), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1692), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68725] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1694), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1696), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68770] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1698), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1700), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68815] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1702), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1704), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68860] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1706), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1708), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68905] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1030), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1032), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68950] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1710), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1712), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [68995] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1714), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1716), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [69040] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1718), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1720), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [69085] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1722), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1724), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [69130] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1726), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1728), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [69175] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1730), 11, + ts_builtin_sym_end, + anon_sym_AT, + anon_sym_LBRACE, + anon_sym_RBRACE, + sym_constant_float, + sym_string_quote, + anon_sym_SQUOTE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_SEMI, + anon_sym_DASH_DASH_DASH, + ACTIONS(1732), 25, + sym_name, + sym_constant_int, + anon_sym_true, + anon_sym_false, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + anon_sym_val, + anon_sym_var, + anon_sym_mod, + anon_sym_use, + anon_sym_fun, + anon_sym_return, + anon_sym_break, + anon_sym_continue, + anon_sym_throw, + anon_sym_from, + anon_sym_do, + anon_sym_if, + anon_sym_match, + anon_sym_loop, + anon_sym_while, + anon_sym_for, + anon_sym_try, + [69220] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1008), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1006), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69264] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(924), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(922), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69308] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1150), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1148), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69352] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(940), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(938), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69396] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1000), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(998), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69440] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(950), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(948), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69484] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(920), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(918), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69528] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(972), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(970), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69572] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1146), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1144), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69616] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(888), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(886), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69660] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(968), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(966), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69704] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1016), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1014), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69748] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1068), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1066), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69792] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1106), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1104), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69836] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1064), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1062), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69880] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(992), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(990), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69924] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(984), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(982), 25, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_EQ_GT, + [69968] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1032), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1030), 24, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + anon_sym_catch, + [70011] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1020), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1018), 24, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + anon_sym_catch, + [70054] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1024), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1022), 24, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + anon_sym_else, + anon_sym_catch, + [70097] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(928), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(926), 23, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70139] = 4, + ACTIONS(1734), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(962), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(960), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70183] = 4, + ACTIONS(1734), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(996), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(994), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70227] = 4, + ACTIONS(1736), 1, + anon_sym_else, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(944), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(942), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70271] = 4, + ACTIONS(1734), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1012), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1010), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70315] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1748), 1, + anon_sym_RPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1512), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [70384] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1122), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1120), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70425] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1060), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1058), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70466] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1166), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1164), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70507] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1174), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1172), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70548] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1206), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1204), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70589] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1110), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1108), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70630] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1754), 1, + anon_sym_RBRACE, + STATE(1298), 1, + sym_arm, + STATE(1394), 1, + sym_variant_name, + STATE(1455), 1, + sym__arms, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [70699] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1076), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1074), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70740] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1756), 1, + anon_sym_RPAREN, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1457), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [70809] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1126), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1124), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70850] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1178), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1176), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70891] = 8, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 8, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 19, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [70942] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1226), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1224), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [70983] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1154), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1152), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71024] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1130), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1128), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71065] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1158), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1156), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71106] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1052), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1050), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71147] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1094), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1092), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71188] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1218), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1216), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71229] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1142), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1140), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71270] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1134), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1132), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71311] = 5, + ACTIONS(1768), 1, + anon_sym_LPAREN, + ACTIONS(1770), 1, + anon_sym_COLON_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1186), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1184), 20, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [71356] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1194), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1192), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71397] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1772), 1, + anon_sym_RBRACE, + STATE(1298), 1, + sym_arm, + STATE(1394), 1, + sym_variant_name, + STATE(1580), 1, + sym__arms, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [71466] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1118), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1116), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71507] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1774), 1, + anon_sym_RPAREN, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1434), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [71576] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1090), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1088), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71617] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1776), 1, + anon_sym_RPAREN, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1504), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [71686] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1238), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1236), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71727] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1072), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1070), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71768] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1202), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1200), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71809] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1114), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1112), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71850] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1080), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1078), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71891] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1162), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1160), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71932] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1056), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1054), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [71973] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1198), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1196), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [72014] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1778), 1, + anon_sym_RPAREN, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1575), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72083] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1138), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1136), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [72124] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1242), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1240), 22, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [72165] = 17, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1780), 1, + anon_sym_RPAREN, + STATE(1364), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + STATE(1454), 1, + sym__params, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72234] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1782), 1, + anon_sym_RBRACE, + STATE(1394), 1, + sym_variant_name, + STATE(1395), 1, + sym_arm, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72300] = 4, + ACTIONS(1784), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1086), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1084), 20, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [72342] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1786), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1168), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72406] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1788), 1, + anon_sym_RPAREN, + STATE(1394), 1, + sym_variant_name, + STATE(1451), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72472] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1790), 1, + anon_sym_RPAREN, + STATE(1378), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72538] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1298), 1, + sym_arm, + STATE(1394), 1, + sym_variant_name, + STATE(1488), 1, + sym__arms, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72604] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1792), 1, + anon_sym_RPAREN, + STATE(1378), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72670] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1298), 1, + sym_arm, + STATE(1394), 1, + sym_variant_name, + STATE(1423), 1, + sym__arms, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72736] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + ACTIONS(1794), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1168), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72800] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1796), 1, + anon_sym_RPAREN, + STATE(1394), 1, + sym_variant_name, + STATE(1428), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72866] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1798), 1, + anon_sym_RBRACE, + STATE(1394), 1, + sym_variant_name, + STATE(1395), 1, + sym_arm, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72932] = 16, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + ACTIONS(1800), 1, + anon_sym_RBRACK, + STATE(1394), 1, + sym_variant_name, + STATE(1487), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [72998] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1481), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73061] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1542), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73124] = 13, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 13, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [73183] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1576), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73246] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1276), 11, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [73307] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1577), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73370] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(458), 1, + anon_sym_RPAREN, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1174), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73433] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1395), 1, + sym_arm, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1254), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73496] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1564), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73559] = 16, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1290), 10, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [73624] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1460), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73687] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1521), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73750] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1578), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73813] = 16, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1284), 10, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [73878] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1559), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [73941] = 16, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1294), 10, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [74006] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1432), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74069] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1539), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74132] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1527), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74195] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1378), 1, + sym__param, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1327), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74258] = 16, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1180), 10, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [74323] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1523), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74386] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1280), 11, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [74447] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1471), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74510] = 15, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + STATE(1495), 1, + sym__patterns, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1167), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74573] = 9, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 6, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 17, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [74624] = 10, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 4, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 17, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [74677] = 12, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 15, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [74734] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1180), 11, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_on, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [74795] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1184), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74855] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1156), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74915] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1202), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [74975] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1239), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75035] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1199), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75095] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1195), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75155] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1209), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75215] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1208), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75275] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1193), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75335] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1226), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75395] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1212), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75455] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1192), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75515] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1204), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75575] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1234), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75635] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1168), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75695] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1248), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75755] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1176), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75815] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1238), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75875] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1224), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75935] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1276), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [75995] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1274), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76055] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1183), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76115] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1277), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76175] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1194), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76235] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1182), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76295] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1236), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76355] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1288), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76415] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1222), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76475] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1237), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76535] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1242), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76595] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1213), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76655] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1158), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76715] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1225), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76775] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1263), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76835] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1206), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76895] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1214), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [76955] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1207), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77015] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1198), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77075] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1218), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77135] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1243), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77195] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1220), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77255] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1262), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77315] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1289), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77375] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1210), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77435] = 14, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(1738), 1, + sym_name, + ACTIONS(1740), 1, + anon_sym_LBRACE, + ACTIONS(1742), 1, + sym_constant_int, + ACTIONS(1744), 1, + sym_constant_float, + ACTIONS(1746), 1, + anon_sym_LPAREN, + ACTIONS(1750), 1, + anon_sym_LBRACK, + ACTIONS(1752), 1, + anon_sym__, + STATE(1394), 1, + sym_variant_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(21), 2, + anon_sym_true, + anon_sym_false, + STATE(1162), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + STATE(1233), 12, + sym__pattern, + sym_pattern_annot, + sym_pattern_or, + sym_pattern_record_concat, + sym_pattern_paren, + sym_pattern_constant, + sym_pattern_name, + sym_pattern_variant, + sym_pattern_tuple, + sym_pattern_record, + sym_pattern_array, + sym_pattern_wild, + [77495] = 19, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1818), 1, + anon_sym_COMMA, + ACTIONS(1822), 1, + anon_sym_EQ, + STATE(1228), 1, + aux_sym__exprs_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1820), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [77564] = 15, + ACTIONS(388), 1, + anon_sym_RBRACE, + ACTIONS(552), 1, + anon_sym_group, + ACTIONS(555), 1, + anon_sym_over, + ACTIONS(632), 1, + anon_sym_from, + ACTIONS(635), 1, + anon_sym_where, + ACTIONS(638), 1, + anon_sym_join, + ACTIONS(641), 1, + anon_sym_union, + ACTIONS(656), 1, + anon_sym_into, + ACTIONS(1826), 1, + anon_sym_roll, + ACTIONS(1829), 1, + anon_sym_compute, + ACTIONS(1832), 1, + anon_sym_select, + ACTIONS(1835), 1, + anon_sym_with, + ACTIONS(1838), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [77624] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1841), 1, + anon_sym_RBRACE, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [77684] = 6, + ACTIONS(1784), 1, + anon_sym_LBRACE, + ACTIONS(1855), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1853), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + ACTIONS(1086), 9, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1084), 14, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [77726] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1857), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1001), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [77786] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1859), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [77846] = 19, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1861), 1, + anon_sym_LBRACE, + ACTIONS(1863), 1, + anon_sym_EQ, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + STATE(1427), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1867), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [77914] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1883), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(989), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [77974] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1885), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78034] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1887), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78098] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1889), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1000), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78158] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1891), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(992), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78218] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1885), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1004), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78278] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1893), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78338] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1883), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78398] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1895), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(995), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78458] = 19, + ACTIONS(974), 1, + anon_sym_as, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1863), 1, + anon_sym_EQ, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1897), 1, + anon_sym_LBRACE, + STATE(1530), 1, + sym__as, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1867), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78526] = 15, + ACTIONS(608), 1, + anon_sym_from, + ACTIONS(610), 1, + anon_sym_where, + ACTIONS(612), 1, + anon_sym_join, + ACTIONS(614), 1, + anon_sym_union, + ACTIONS(616), 1, + anon_sym_group, + ACTIONS(618), 1, + anon_sym_over, + ACTIONS(628), 1, + anon_sym_into, + ACTIONS(1843), 1, + anon_sym_roll, + ACTIONS(1845), 1, + anon_sym_compute, + ACTIONS(1847), 1, + anon_sym_select, + ACTIONS(1849), 1, + anon_sym_with, + ACTIONS(1851), 1, + anon_sym_order, + ACTIONS(1899), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(988), 14, + aux_sym__query_stmts, + sym__query_stmt, + sym_query_from, + sym_query_where, + sym_query_join, + sym_query_union, + sym_query_group, + sym_query_over, + sym_query_roll, + sym_query_compute, + sym_query_select, + sym_query_val, + sym_query_into, + sym_query_order, + [78586] = 18, + ACTIONS(310), 1, + anon_sym_RBRACE, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78651] = 16, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 6, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78712] = 18, + ACTIONS(322), 1, + anon_sym_RBRACE, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78777] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1903), 1, + anon_sym_COMMA, + ACTIONS(1905), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78842] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + STATE(502), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78907] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + STATE(437), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [78972] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1929), 1, + anon_sym_COMMA, + ACTIONS(1931), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79037] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(858), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79102] = 12, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 11, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [79155] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(863), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79220] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 7, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [79277] = 13, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 9, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [79332] = 3, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1086), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1084), 16, + anon_sym_LBRACE, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_or, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_COLON_COLON, + [79367] = 10, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 4, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 13, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [79416] = 9, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 6, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 13, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [79463] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 7, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [79520] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 7, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [79577] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1935), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79640] = 6, + ACTIONS(1768), 1, + anon_sym_LPAREN, + ACTIONS(1770), 1, + anon_sym_COLON_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1937), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + ACTIONS(1186), 10, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_DOT, + ACTIONS(1184), 12, + anon_sym_LBRACK, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [79681] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(1939), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79746] = 18, + ACTIONS(334), 1, + anon_sym_RBRACE, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79811] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(1941), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79876] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + STATE(525), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [79941] = 16, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 6, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80002] = 16, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 6, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80063] = 16, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1869), 1, + anon_sym_DOT_DOT, + ACTIONS(1871), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1865), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1873), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1875), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1877), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1879), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1881), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 6, + anon_sym_LBRACE, + anon_sym_as, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80124] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(1943), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80189] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(889), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80254] = 18, + ACTIONS(324), 1, + anon_sym_RBRACE, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80319] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1945), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80382] = 18, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(1947), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80447] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1949), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80509] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1951), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80571] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1953), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80633] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1955), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80695] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1957), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80757] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1959), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80819] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1961), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80881] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1963), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [80943] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1965), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81005] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1967), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81067] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1969), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81129] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1282), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1280), 6, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [81185] = 16, + ACTIONS(1182), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 5, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81245] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1971), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81307] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1901), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81369] = 10, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 4, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1180), 12, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [81417] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1973), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81479] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1975), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81541] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1977), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81603] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1278), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1276), 6, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [81659] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1979), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81721] = 12, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 10, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + [81773] = 16, + ACTIONS(1286), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1284), 5, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81833] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1981), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81895] = 16, + ACTIONS(1292), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1290), 5, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [81955] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1983), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82017] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1985), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82079] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1987), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82141] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1989), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82203] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1991), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82265] = 16, + ACTIONS(1296), 1, + anon_sym_EQ, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1294), 5, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82325] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1993), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82387] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1909), 1, + anon_sym_EQ, + ACTIONS(1915), 1, + anon_sym_DOT_DOT, + ACTIONS(1917), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1995), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1913), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82449] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1997), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82511] = 13, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 8, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + [82565] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(1999), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82627] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(2001), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82689] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(2003), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82751] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(2005), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82813] = 14, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1182), 2, + anon_sym_EQ, + anon_sym_DOT_DOT, + ACTIONS(1911), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1919), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1921), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1923), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1925), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1180), 6, + anon_sym_LBRACE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + [82869] = 9, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1927), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1182), 6, + anon_sym_EQ, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1180), 12, + anon_sym_LBRACE, + anon_sym_or, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_DOT_DOT_EQ, + anon_sym_and, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + [82915] = 17, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1766), 1, + anon_sym_DOT, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(2007), 1, + anon_sym_on, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [82977] = 16, + ACTIONS(1758), 1, + anon_sym_COLON, + ACTIONS(1760), 1, + anon_sym_LPAREN, + ACTIONS(1762), 1, + anon_sym_LBRACK, + ACTIONS(1764), 1, + anon_sym_COLON_COLON, + ACTIONS(1814), 1, + anon_sym_DOT_DOT, + ACTIONS(1816), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(1822), 1, + anon_sym_EQ, + ACTIONS(2009), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1802), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1804), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1806), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1808), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1810), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1812), 2, + anon_sym_or, + anon_sym_and, + ACTIONS(1824), 4, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + [83036] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2017), 1, + anon_sym_RPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + STATE(1148), 1, + sym_type_name, + STATE(1534), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83083] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2027), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1579), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83130] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2029), 1, + anon_sym_RBRACK, + STATE(1148), 1, + sym_type_name, + STATE(1494), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83177] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2033), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2031), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(1232), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83222] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2035), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1529), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83269] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2037), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1562), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83316] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2039), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1567), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83363] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2041), 1, + anon_sym_RBRACK, + STATE(1148), 1, + sym_type_name, + STATE(1422), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83410] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2043), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1509), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83457] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2045), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1473), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83504] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2047), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1419), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83551] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2049), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1500), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83598] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2051), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1484), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83645] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2033), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2053), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(1232), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83690] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2055), 1, + anon_sym_RBRACK, + STATE(1148), 1, + sym_type_name, + STATE(1486), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83737] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2057), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1505), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83784] = 12, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2059), 1, + anon_sym_RPAREN, + STATE(1148), 1, + sym_type_name, + STATE(1436), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83831] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + STATE(1148), 1, + sym_type_name, + STATE(1585), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83875] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + STATE(1148), 1, + sym_type_name, + STATE(1458), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83919] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + STATE(1148), 1, + sym_type_name, + STATE(1569), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [83963] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2061), 1, + anon_sym_RPAREN, + ACTIONS(2063), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1293), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84007] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2023), 1, + sym_type_never, + ACTIONS(2025), 1, + anon_sym__, + STATE(1148), 1, + sym_type_name, + STATE(1424), 1, + sym__types, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1177), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84051] = 11, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2065), 1, + anon_sym_RPAREN, + ACTIONS(2067), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1350), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84095] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2069), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1186), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84136] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2071), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1249), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84177] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2073), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1264), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84218] = 10, + ACTIONS(2075), 1, + sym_name, + ACTIONS(2077), 1, + anon_sym_LBRACE, + ACTIONS(2079), 1, + anon_sym_LPAREN, + ACTIONS(2081), 1, + anon_sym_LBRACK, + ACTIONS(2083), 1, + anon_sym_fun, + ACTIONS(2085), 1, + sym_type_never, + ACTIONS(2087), 1, + anon_sym__, + STATE(433), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(456), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84259] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2089), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1287), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84300] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2091), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1230), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84341] = 10, + ACTIONS(2075), 1, + sym_name, + ACTIONS(2077), 1, + anon_sym_LBRACE, + ACTIONS(2079), 1, + anon_sym_LPAREN, + ACTIONS(2081), 1, + anon_sym_LBRACK, + ACTIONS(2083), 1, + anon_sym_fun, + ACTIONS(2087), 1, + anon_sym__, + ACTIONS(2093), 1, + sym_type_never, + STATE(433), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(452), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84382] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2095), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1278), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84423] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2097), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1251), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84464] = 10, + ACTIONS(2075), 1, + sym_name, + ACTIONS(2077), 1, + anon_sym_LBRACE, + ACTIONS(2079), 1, + anon_sym_LPAREN, + ACTIONS(2081), 1, + anon_sym_LBRACK, + ACTIONS(2083), 1, + anon_sym_fun, + ACTIONS(2087), 1, + anon_sym__, + ACTIONS(2099), 1, + sym_type_never, + STATE(433), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(441), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84505] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2101), 1, + anon_sym_fun, + ACTIONS(2103), 1, + sym_type_never, + STATE(855), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(841), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84546] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2033), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1232), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84587] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2105), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1200), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84628] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2107), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1273), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84669] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2109), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1227), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84710] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2111), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1272), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84751] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2113), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1257), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84792] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2115), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1175), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84833] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2101), 1, + anon_sym_fun, + ACTIONS(2117), 1, + sym_type_never, + STATE(855), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(859), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84874] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2119), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1164), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84915] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2121), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1215), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84956] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2123), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1196), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [84997] = 10, + ACTIONS(2075), 1, + sym_name, + ACTIONS(2077), 1, + anon_sym_LBRACE, + ACTIONS(2079), 1, + anon_sym_LPAREN, + ACTIONS(2081), 1, + anon_sym_LBRACK, + ACTIONS(2083), 1, + anon_sym_fun, + ACTIONS(2087), 1, + anon_sym__, + ACTIONS(2125), 1, + sym_type_never, + STATE(433), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(431), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85038] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2127), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1382), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85079] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2129), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1367), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85120] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2101), 1, + anon_sym_fun, + ACTIONS(2131), 1, + sym_type_never, + STATE(855), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(856), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85161] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2133), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1244), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85202] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2135), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1283), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85243] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2137), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1252), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85284] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2139), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1190), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85325] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2141), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1412), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85366] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2143), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1385), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85407] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2145), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1401), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85448] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2147), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1151), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85489] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2149), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1320), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85530] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2151), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1268), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85571] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2103), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(841), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85612] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2153), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1188), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85653] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2155), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1219), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85694] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2157), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1270), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85735] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2101), 1, + anon_sym_fun, + ACTIONS(2159), 1, + sym_type_never, + STATE(855), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(857), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85776] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2161), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1259), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85817] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2163), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1284), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85858] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2165), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1392), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85899] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2167), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1217), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85940] = 10, + ACTIONS(2011), 1, + sym_name, + ACTIONS(2013), 1, + anon_sym_LBRACE, + ACTIONS(2015), 1, + anon_sym_LPAREN, + ACTIONS(2019), 1, + anon_sym_LBRACK, + ACTIONS(2021), 1, + anon_sym_fun, + ACTIONS(2025), 1, + anon_sym__, + ACTIONS(2169), 1, + sym_type_never, + STATE(1148), 1, + sym_type_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + STATE(1150), 10, + sym__type, + sym_type_fun, + sym_type_record_concat, + sym_type_paren, + sym_type_nominal, + sym_type_tuple, + sym_type_record, + sym_type_array, + sym_type_unit, + sym_type_wild, + [85981] = 4, + ACTIONS(928), 1, + anon_sym_EQ, + ACTIONS(2171), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(926), 11, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86005] = 8, + ACTIONS(17), 1, + sym_string_quote, + ACTIONS(19), 1, + anon_sym_SQUOTE, + ACTIONS(2173), 1, + sym_constant_int, + ACTIONS(2175), 1, + sym_constant_float, + ACTIONS(2179), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2177), 2, + anon_sym_true, + anon_sym_false, + STATE(1407), 5, + sym__constant, + sym_constant_string, + sym_constant_char, + sym_constant_bool, + sym_constant_unit, + [86036] = 4, + ACTIONS(1012), 1, + anon_sym_EQ, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1010), 10, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86059] = 4, + ACTIONS(996), 1, + anon_sym_EQ, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(994), 10, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_SEMI, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86082] = 4, + ACTIONS(2187), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2183), 2, + anon_sym_LBRACE, + anon_sym_LPAREN, + ACTIONS(2185), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86105] = 3, + ACTIONS(2191), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2189), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86124] = 3, + ACTIONS(2195), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2193), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86143] = 3, + ACTIONS(2199), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2197), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86162] = 3, + ACTIONS(2203), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2201), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86181] = 3, + ACTIONS(2207), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2205), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86200] = 3, + ACTIONS(2211), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2209), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86219] = 3, + ACTIONS(2215), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2213), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86238] = 3, + ACTIONS(2219), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2217), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86257] = 3, + ACTIONS(2223), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2221), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86276] = 3, + ACTIONS(2227), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2225), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86295] = 3, + ACTIONS(2231), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2229), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86314] = 4, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2235), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2233), 8, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86335] = 3, + ACTIONS(2239), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2237), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86354] = 3, + ACTIONS(2243), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2241), 9, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_AMP, + anon_sym_or, + anon_sym_in, + anon_sym_EQ_GT, + [86373] = 7, + ACTIONS(2245), 1, + anon_sym_COMMA, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + STATE(1250), 1, + aux_sym__patterns_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2249), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [86397] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2255), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + [86416] = 5, + ACTIONS(2259), 1, + sym_string_quote, + ACTIONS(2261), 1, + sym_string_content, + ACTIONS(2263), 1, + anon_sym_DOLLAR, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + STATE(1173), 2, + sym_string_interpolation, + aux_sym_constant_string_repeat1, + [86434] = 5, + ACTIONS(2263), 1, + anon_sym_DOLLAR, + ACTIONS(2265), 1, + sym_string_quote, + ACTIONS(2267), 1, + sym_string_content, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + STATE(1171), 2, + sym_string_interpolation, + aux_sym_constant_string_repeat1, + [86452] = 5, + ACTIONS(2261), 1, + sym_string_content, + ACTIONS(2263), 1, + anon_sym_DOLLAR, + ACTIONS(2269), 1, + sym_string_quote, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + STATE(1173), 2, + sym_string_interpolation, + aux_sym_constant_string_repeat1, + [86470] = 5, + ACTIONS(2263), 1, + anon_sym_DOLLAR, + ACTIONS(2271), 1, + sym_string_quote, + ACTIONS(2273), 1, + sym_string_content, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + STATE(1169), 2, + sym_string_interpolation, + aux_sym_constant_string_repeat1, + [86488] = 5, + ACTIONS(2275), 1, + sym_string_quote, + ACTIONS(2277), 1, + sym_string_content, + ACTIONS(2280), 1, + anon_sym_DOLLAR, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + STATE(1173), 2, + sym_string_interpolation, + aux_sym_constant_string_repeat1, + [86506] = 6, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2283), 1, + anon_sym_COMMA, + ACTIONS(2285), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86526] = 4, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2233), 2, + anon_sym_COLON, + anon_sym_or, + ACTIONS(2287), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [86542] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2289), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [86560] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2291), 1, + anon_sym_COMMA, + STATE(1267), 1, + aux_sym__types_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2293), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [86578] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2297), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1440), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86595] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2299), 1, + anon_sym_COLON, + ACTIONS(2301), 1, + anon_sym_EQ, + STATE(899), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86612] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2303), 1, + anon_sym_COLON, + ACTIONS(2305), 1, + anon_sym_EQ, + STATE(899), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86629] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2307), 1, + anon_sym_COLON, + ACTIONS(2309), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86646] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2311), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86663] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2313), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86680] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2315), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86697] = 5, + ACTIONS(2317), 1, + anon_sym_def, + ACTIONS(2319), 1, + anon_sym_type, + ACTIONS(2321), 1, + anon_sym_enum, + ACTIONS(2323), 1, + anon_sym_struct, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86714] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2325), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86731] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2327), 1, + anon_sym_COLON, + ACTIONS(2329), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86748] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2331), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86765] = 5, + ACTIONS(2333), 1, + sym_name, + ACTIONS(2335), 1, + anon_sym_RBRACE, + STATE(1336), 1, + sym_attribute, + STATE(1508), 1, + sym__attributes, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86782] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2337), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86799] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2339), 1, + anon_sym_COLON, + ACTIONS(2341), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86816] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2343), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86833] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2345), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86850] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2347), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86867] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2349), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86884] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2351), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86901] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2353), 1, + anon_sym_COLON, + ACTIONS(2355), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86918] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2357), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86935] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2359), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86952] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2361), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86969] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2363), 1, + anon_sym_COLON, + ACTIONS(2365), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [86986] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2367), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87003] = 5, + ACTIONS(2369), 1, + sym_name, + ACTIONS(2371), 1, + anon_sym_RBRACE, + STATE(1354), 1, + sym_pattern_field, + STATE(1490), 1, + sym__pattern_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87020] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2373), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87037] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2375), 1, + anon_sym_COLON, + ACTIONS(2377), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87054] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2379), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87071] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2381), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87088] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2383), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87105] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2385), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87122] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2387), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87139] = 5, + ACTIONS(2389), 1, + anon_sym_DASH_DASH_DASH, + ACTIONS(2391), 1, + aux_sym_code_token1, + STATE(1355), 1, + aux_sym_code_repeat1, + STATE(1485), 1, + sym_code, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [87156] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2393), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87173] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2395), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87190] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2397), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87207] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2399), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87224] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2401), 1, + anon_sym_COLON, + ACTIONS(2403), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87241] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2405), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87258] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2407), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87275] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2409), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87292] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2411), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87309] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2413), 1, + anon_sym_COLON, + ACTIONS(2415), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87326] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2417), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87343] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2419), 4, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + [87354] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2421), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87371] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2423), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87388] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2425), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87405] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2427), 1, + anon_sym_EQ, + STATE(875), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87422] = 4, + ACTIONS(2429), 1, + anon_sym_COMMA, + STATE(1246), 1, + aux_sym__exprs_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(448), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [87437] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2431), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1445), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87454] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2435), 1, + anon_sym_EQ, + STATE(817), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87471] = 5, + ACTIONS(2059), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1438), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87488] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2439), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + [87501] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2441), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87518] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2443), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87535] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2445), 1, + anon_sym_COLON, + ACTIONS(2447), 1, + anon_sym_EQ, + STATE(899), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87552] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2449), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87569] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2451), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87586] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2453), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87603] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2455), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87620] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2457), 4, + anon_sym_def, + anon_sym_type, + anon_sym_enum, + anon_sym_struct, + [87631] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2459), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1448), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87648] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2461), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87665] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2463), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87682] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2465), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87699] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2467), 1, + anon_sym_COLON, + ACTIONS(2469), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87716] = 4, + ACTIONS(2471), 1, + anon_sym_COMMA, + STATE(1246), 1, + aux_sym__exprs_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1887), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [87731] = 4, + ACTIONS(2474), 1, + anon_sym_LBRACE, + ACTIONS(2478), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2476), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [87746] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2480), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87763] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2482), 1, + anon_sym_EQ, + STATE(830), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87780] = 4, + ACTIONS(2484), 1, + anon_sym_COMMA, + STATE(1271), 1, + aux_sym__patterns_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(1786), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [87795] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2486), 1, + anon_sym_EQ, + STATE(809), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87812] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2488), 1, + anon_sym_EQ, + STATE(808), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87829] = 5, + ACTIONS(1796), 1, + anon_sym_RBRACE, + ACTIONS(2369), 1, + sym_name, + STATE(1354), 1, + sym_pattern_field, + STATE(1472), 1, + sym__pattern_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87846] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2490), 1, + anon_sym_EQ_GT, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87863] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2492), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1463), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87880] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2494), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1465), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87897] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2496), 1, + anon_sym_EQ, + STATE(804), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87914] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2498), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1416), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87931] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2500), 1, + anon_sym_EQ, + STATE(802), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87948] = 5, + ACTIONS(2045), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1510), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87965] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2502), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1474), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87982] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2504), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [87999] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2506), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88016] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2508), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88033] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2510), 1, + anon_sym_COLON, + ACTIONS(2512), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88050] = 5, + ACTIONS(2043), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1507), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88067] = 4, + ACTIONS(2514), 1, + anon_sym_COMMA, + STATE(1281), 1, + aux_sym__types_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2031), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [88082] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2516), 1, + anon_sym_EQ, + STATE(791), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88099] = 5, + ACTIONS(2035), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1528), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88116] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2518), 1, + anon_sym_EQ, + STATE(875), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88133] = 4, + ACTIONS(2520), 1, + anon_sym_COMMA, + STATE(1271), 1, + aux_sym__patterns_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2255), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [88148] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2523), 1, + anon_sym_EQ, + STATE(785), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88165] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2525), 1, + anon_sym_EQ, + STATE(805), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88182] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2527), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88199] = 5, + ACTIONS(2047), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1418), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88216] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2529), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88233] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2531), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88250] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2533), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88267] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2535), 1, + anon_sym_COLON, + ACTIONS(2537), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88284] = 5, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2539), 1, + anon_sym_RBRACK, + STATE(1345), 1, + sym_generic, + STATE(1433), 1, + sym__generics, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88301] = 4, + ACTIONS(2541), 1, + anon_sym_COMMA, + STATE(1281), 1, + aux_sym__types_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2439), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [88316] = 5, + ACTIONS(2037), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1449), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88333] = 5, + ACTIONS(1933), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2544), 1, + anon_sym_EQ, + STATE(875), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88350] = 5, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2433), 1, + anon_sym_LBRACE, + ACTIONS(2546), 1, + anon_sym_EQ, + STATE(786), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88367] = 5, + ACTIONS(2049), 1, + anon_sym_RBRACE, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1417), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88384] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2548), 1, + anon_sym_COLON, + ACTIONS(2550), 1, + anon_sym_EQ, + STATE(526), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88401] = 5, + ACTIONS(1907), 1, + anon_sym_LBRACE, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2552), 1, + anon_sym_EQ, + STATE(490), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88418] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2554), 1, + anon_sym_in, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88435] = 5, + ACTIONS(2247), 1, + anon_sym_COLON, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2556), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88452] = 4, + ACTIONS(2558), 1, + anon_sym_RBRACE, + ACTIONS(2560), 1, + anon_sym_COMMA, + STATE(1290), 1, + aux_sym__pattern_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88466] = 4, + ACTIONS(2563), 1, + anon_sym_RBRACE, + ACTIONS(2565), 1, + anon_sym_COMMA, + STATE(1291), 1, + aux_sym__type_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88480] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2570), 1, + anon_sym_RBRACE, + STATE(1359), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88494] = 4, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2572), 1, + anon_sym_COMMA, + ACTIONS(2574), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88508] = 4, + ACTIONS(2576), 1, + anon_sym_RBRACE, + ACTIONS(2578), 1, + anon_sym_COMMA, + STATE(1338), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88522] = 4, + ACTIONS(2576), 1, + anon_sym_RBRACE, + ACTIONS(2578), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88536] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2576), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88550] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2580), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88564] = 4, + ACTIONS(2582), 1, + anon_sym_RBRACE, + ACTIONS(2584), 1, + anon_sym_COMMA, + STATE(1352), 1, + aux_sym__arms_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88578] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2586), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88592] = 4, + ACTIONS(2586), 1, + anon_sym_RBRACE, + ACTIONS(2588), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88606] = 4, + ACTIONS(2590), 1, + anon_sym_DASH_DASH_DASH, + ACTIONS(2592), 1, + aux_sym_code_token1, + STATE(1301), 1, + aux_sym_code_repeat1, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [88620] = 4, + ACTIONS(2595), 1, + anon_sym_RBRACE, + ACTIONS(2597), 1, + anon_sym_COMMA, + STATE(1290), 1, + aux_sym__pattern_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88634] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2599), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88648] = 4, + ACTIONS(2333), 1, + sym_name, + ACTIONS(2601), 1, + anon_sym_RBRACE, + STATE(1406), 1, + sym_attribute, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88662] = 4, + ACTIONS(2603), 1, + anon_sym_RBRACE, + ACTIONS(2605), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88676] = 4, + ACTIONS(2607), 1, + anon_sym_RBRACE, + ACTIONS(2609), 1, + anon_sym_COMMA, + STATE(1344), 1, + aux_sym__expr_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88690] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2603), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88704] = 4, + ACTIONS(2369), 1, + sym_name, + ACTIONS(2595), 1, + anon_sym_RBRACE, + STATE(1381), 1, + sym_pattern_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88718] = 4, + ACTIONS(2611), 1, + sym_name, + ACTIONS(2613), 1, + anon_sym_LBRACE, + STATE(1348), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88732] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2615), 1, + anon_sym_RBRACE, + STATE(1346), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88746] = 4, + ACTIONS(2615), 1, + anon_sym_RBRACE, + ACTIONS(2617), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88760] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2615), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88774] = 4, + ACTIONS(2619), 1, + anon_sym_RBRACE, + ACTIONS(2621), 1, + anon_sym_COMMA, + STATE(1313), 1, + aux_sym__attributes_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88788] = 4, + ACTIONS(1790), 1, + anon_sym_RPAREN, + ACTIONS(2624), 1, + anon_sym_COMMA, + STATE(1351), 1, + aux_sym__params_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88802] = 4, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2626), 1, + anon_sym_RBRACK, + STATE(1384), 1, + sym_generic, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88816] = 4, + ACTIONS(2628), 1, + anon_sym_LBRACE, + ACTIONS(2630), 1, + anon_sym_LPAREN, + ACTIONS(2632), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88830] = 4, + ACTIONS(2626), 1, + anon_sym_RBRACK, + ACTIONS(2634), 1, + anon_sym_COMMA, + STATE(1340), 1, + aux_sym__generics_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88844] = 4, + ACTIONS(2636), 1, + anon_sym_RBRACE, + ACTIONS(2638), 1, + anon_sym_COMMA, + STATE(1318), 1, + aux_sym__arms_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88858] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2641), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88872] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2643), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [88884] = 4, + ACTIONS(2603), 1, + anon_sym_RBRACE, + ACTIONS(2605), 1, + anon_sym_COMMA, + STATE(1300), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88898] = 4, + ACTIONS(2645), 1, + anon_sym_RBRACE, + ACTIONS(2647), 1, + anon_sym_COMMA, + STATE(1337), 1, + aux_sym__type_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88912] = 4, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1492), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88926] = 4, + ACTIONS(2649), 1, + anon_sym_RBRACE, + ACTIONS(2651), 1, + anon_sym_COMMA, + STATE(1329), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88940] = 3, + ACTIONS(2655), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2653), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [88952] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2657), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88966] = 4, + ACTIONS(2251), 1, + anon_sym_AMP, + ACTIONS(2253), 1, + anon_sym_or, + ACTIONS(2659), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88980] = 4, + ACTIONS(2437), 1, + sym_name, + ACTIONS(2661), 1, + anon_sym_RBRACE, + STATE(1391), 1, + sym_type_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [88994] = 4, + ACTIONS(2657), 1, + anon_sym_RBRACE, + ACTIONS(2663), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89008] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2657), 1, + anon_sym_RBRACE, + STATE(1332), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89022] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2665), 1, + anon_sym_RBRACE, + STATE(1294), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89036] = 4, + ACTIONS(2665), 1, + anon_sym_RBRACE, + ACTIONS(2667), 1, + anon_sym_COMMA, + STATE(1295), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89050] = 4, + ACTIONS(2669), 1, + anon_sym_RBRACE, + ACTIONS(2671), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89064] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2665), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89078] = 4, + ACTIONS(2437), 1, + sym_name, + ACTIONS(2674), 1, + anon_sym_RBRACE, + STATE(1391), 1, + sym_type_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89092] = 4, + ACTIONS(2676), 1, + anon_sym_RBRACE, + ACTIONS(2678), 1, + anon_sym_COMMA, + STATE(1360), 1, + aux_sym__attributes_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89106] = 4, + ACTIONS(2674), 1, + anon_sym_RBRACE, + ACTIONS(2680), 1, + anon_sym_COMMA, + STATE(1291), 1, + aux_sym__type_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89120] = 4, + ACTIONS(2682), 1, + anon_sym_RBRACE, + ACTIONS(2684), 1, + anon_sym_COMMA, + STATE(1333), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89134] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2682), 1, + anon_sym_RBRACE, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89148] = 4, + ACTIONS(2686), 1, + anon_sym_COMMA, + ACTIONS(2689), 1, + anon_sym_RBRACK, + STATE(1340), 1, + aux_sym__generics_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89162] = 4, + ACTIONS(2295), 1, + sym_name, + ACTIONS(2691), 1, + anon_sym_RBRACK, + STATE(1384), 1, + sym_generic, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89176] = 4, + ACTIONS(2369), 1, + sym_name, + ACTIONS(2693), 1, + anon_sym_RBRACE, + STATE(1381), 1, + sym_pattern_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89190] = 3, + ACTIONS(1024), 1, + sym_string_content, + ACTIONS(1022), 2, + sym_string_quote, + anon_sym_DOLLAR, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [89202] = 4, + ACTIONS(376), 1, + anon_sym_RBRACE, + ACTIONS(2695), 1, + anon_sym_COMMA, + STATE(1361), 1, + aux_sym__expr_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89216] = 4, + ACTIONS(2697), 1, + anon_sym_COMMA, + ACTIONS(2699), 1, + anon_sym_RBRACK, + STATE(1317), 1, + aux_sym__generics_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89230] = 4, + ACTIONS(2599), 1, + anon_sym_RBRACE, + ACTIONS(2701), 1, + anon_sym_COMMA, + STATE(1305), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89244] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2599), 1, + anon_sym_RBRACE, + STATE(1321), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89258] = 3, + ACTIONS(2705), 1, + sym_string_content, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2703), 2, + sym_string_quote, + anon_sym_DOLLAR, + [89270] = 4, + ACTIONS(2568), 1, + sym_name, + ACTIONS(2707), 1, + anon_sym_RBRACE, + STATE(1324), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89284] = 4, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2709), 1, + anon_sym_COMMA, + ACTIONS(2711), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89298] = 4, + ACTIONS(2713), 1, + anon_sym_COMMA, + ACTIONS(2716), 1, + anon_sym_RPAREN, + STATE(1351), 1, + aux_sym__params_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89312] = 4, + ACTIONS(1798), 1, + anon_sym_RBRACE, + ACTIONS(2718), 1, + anon_sym_COMMA, + STATE(1318), 1, + aux_sym__arms_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89326] = 3, + ACTIONS(2722), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2720), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89338] = 4, + ACTIONS(2724), 1, + anon_sym_RBRACE, + ACTIONS(2726), 1, + anon_sym_COMMA, + STATE(1302), 1, + aux_sym__pattern_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89352] = 4, + ACTIONS(2728), 1, + anon_sym_DASH_DASH_DASH, + ACTIONS(2730), 1, + aux_sym_code_token1, + STATE(1301), 1, + aux_sym_code_repeat1, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [89366] = 4, + ACTIONS(2732), 1, + anon_sym_LBRACE, + ACTIONS(2734), 1, + anon_sym_LPAREN, + ACTIONS(2736), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89380] = 4, + ACTIONS(2437), 1, + sym_name, + STATE(1322), 1, + sym_type_field, + STATE(1501), 1, + sym__type_fields, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89394] = 4, + ACTIONS(2333), 1, + sym_name, + ACTIONS(2738), 1, + anon_sym_RBRACE, + STATE(1406), 1, + sym_attribute, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89408] = 4, + ACTIONS(2740), 1, + anon_sym_RBRACE, + ACTIONS(2742), 1, + anon_sym_COMMA, + STATE(1311), 1, + aux_sym_stmt_enum_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89422] = 4, + ACTIONS(2738), 1, + anon_sym_RBRACE, + ACTIONS(2744), 1, + anon_sym_COMMA, + STATE(1313), 1, + aux_sym__attributes_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89436] = 4, + ACTIONS(2746), 1, + anon_sym_RBRACE, + ACTIONS(2748), 1, + anon_sym_COMMA, + STATE(1361), 1, + aux_sym__expr_fields_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89450] = 3, + ACTIONS(1032), 1, + sym_string_content, + ACTIONS(1030), 2, + sym_string_quote, + anon_sym_DOLLAR, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [89462] = 3, + ACTIONS(1020), 1, + sym_string_content, + ACTIONS(1018), 2, + sym_string_quote, + anon_sym_DOLLAR, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [89474] = 4, + ACTIONS(2751), 1, + anon_sym_COMMA, + ACTIONS(2753), 1, + anon_sym_RPAREN, + STATE(1314), 1, + aux_sym__params_repeat1, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89488] = 3, + ACTIONS(2369), 1, + sym_name, + STATE(1381), 1, + sym_pattern_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89499] = 3, + ACTIONS(2755), 1, + anon_sym_LBRACK, + ACTIONS(2757), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89510] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2759), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89521] = 3, + ACTIONS(2761), 1, + anon_sym_LBRACE, + ACTIONS(2763), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89532] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2746), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89541] = 3, + ACTIONS(2765), 1, + anon_sym_LBRACE, + ACTIONS(2767), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89552] = 3, + ACTIONS(1907), 1, + anon_sym_LBRACE, + STATE(465), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89563] = 3, + ACTIONS(1907), 1, + anon_sym_LBRACE, + STATE(464), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89574] = 3, + ACTIONS(2333), 1, + sym_name, + STATE(1406), 1, + sym_attribute, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89585] = 3, + ACTIONS(2769), 1, + sym_name, + ACTIONS(2771), 1, + sym_index, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89596] = 3, + ACTIONS(2773), 1, + anon_sym_LPAREN, + ACTIONS(2775), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89607] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(1552), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89618] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2777), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [89627] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2716), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [89636] = 3, + ACTIONS(1907), 1, + anon_sym_LBRACE, + STATE(495), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89647] = 3, + ACTIONS(2779), 1, + sym_name, + ACTIONS(2781), 1, + sym_index, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89658] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2558), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89667] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2783), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89678] = 3, + ACTIONS(2785), 1, + anon_sym_LBRACE, + ACTIONS(2787), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89689] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2689), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [89698] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2789), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89709] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2791), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89718] = 3, + ACTIONS(1907), 1, + anon_sym_LBRACE, + STATE(487), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89729] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(885), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89740] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2669), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89749] = 3, + ACTIONS(1907), 1, + anon_sym_LBRACE, + STATE(485), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89760] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2563), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89769] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2793), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89780] = 3, + ACTIONS(2781), 1, + sym_index, + ACTIONS(2795), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89791] = 3, + ACTIONS(2797), 1, + anon_sym_LBRACE, + ACTIONS(2799), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89802] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2636), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89811] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(870), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89822] = 3, + ACTIONS(2801), 1, + anon_sym_LBRACE, + ACTIONS(2803), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89833] = 3, + ACTIONS(2805), 1, + anon_sym_LBRACE, + ACTIONS(2807), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89844] = 3, + ACTIONS(2809), 1, + anon_sym_LBRACK, + ACTIONS(2811), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89855] = 3, + ACTIONS(2813), 1, + anon_sym_LPAREN, + ACTIONS(2815), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89866] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2817), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89877] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2819), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89886] = 3, + ACTIONS(2821), 1, + anon_sym_LBRACE, + ACTIONS(2823), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89897] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(1522), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89908] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(898), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89919] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2619), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89928] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2825), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89937] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(895), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89948] = 3, + ACTIONS(2295), 1, + sym_name, + STATE(1384), 1, + sym_generic, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89959] = 3, + ACTIONS(1933), 1, + anon_sym_LBRACE, + STATE(877), 1, + sym_block, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89970] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2827), 2, + anon_sym_rust, + anon_sym_python, + [89979] = 3, + ACTIONS(2181), 1, + anon_sym_AMP, + ACTIONS(2829), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [89990] = 2, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + ACTIONS(2831), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [89999] = 3, + ACTIONS(2568), 1, + sym_name, + STATE(1389), 1, + sym_variant, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90010] = 3, + ACTIONS(2437), 1, + sym_name, + STATE(1391), 1, + sym_type_field, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90021] = 2, + ACTIONS(2833), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90029] = 2, + ACTIONS(2047), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90037] = 2, + ACTIONS(2835), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90045] = 2, + ACTIONS(2835), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90053] = 2, + ACTIONS(2837), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90061] = 2, + ACTIONS(2839), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90069] = 2, + ACTIONS(2841), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90077] = 2, + ACTIONS(2843), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90085] = 2, + ACTIONS(2845), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90093] = 2, + ACTIONS(2847), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90101] = 2, + ACTIONS(2849), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90109] = 2, + ACTIONS(2851), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90117] = 2, + ACTIONS(2853), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90125] = 2, + ACTIONS(2855), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90133] = 2, + ACTIONS(2857), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90141] = 2, + ACTIONS(458), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90149] = 2, + ACTIONS(2859), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90157] = 2, + ACTIONS(2861), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90165] = 2, + ACTIONS(2863), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90173] = 2, + ACTIONS(2865), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90181] = 2, + ACTIONS(2867), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90189] = 2, + ACTIONS(2869), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90197] = 2, + ACTIONS(2867), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90205] = 2, + ACTIONS(2871), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90213] = 2, + ACTIONS(2873), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90221] = 2, + ACTIONS(2875), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90229] = 2, + ACTIONS(2877), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90237] = 2, + ACTIONS(2879), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90245] = 2, + ACTIONS(2881), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90253] = 2, + ACTIONS(2883), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90261] = 2, + ACTIONS(2885), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90269] = 2, + ACTIONS(2887), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90277] = 2, + ACTIONS(2889), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90285] = 2, + ACTIONS(2891), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90293] = 2, + ACTIONS(2893), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90301] = 2, + ACTIONS(2895), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90309] = 2, + ACTIONS(2897), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90317] = 2, + ACTIONS(2899), 1, + anon_sym_finally, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90325] = 2, + ACTIONS(2901), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90333] = 2, + ACTIONS(2903), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90341] = 2, + ACTIONS(2905), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90349] = 2, + ACTIONS(2907), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90357] = 2, + ACTIONS(2909), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90365] = 2, + ACTIONS(2911), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90373] = 2, + ACTIONS(2913), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90381] = 2, + ACTIONS(2915), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90389] = 2, + ACTIONS(2917), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90397] = 2, + ACTIONS(2919), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90405] = 2, + ACTIONS(2921), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90413] = 2, + ACTIONS(2923), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90421] = 2, + ACTIONS(2925), 1, + anon_sym_SQUOTE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90429] = 2, + ACTIONS(2927), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90437] = 2, + ACTIONS(2929), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90445] = 2, + ACTIONS(2931), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90453] = 2, + ACTIONS(2933), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90461] = 2, + ACTIONS(2935), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90469] = 2, + ACTIONS(2853), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90477] = 2, + ACTIONS(2937), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90485] = 2, + ACTIONS(2939), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90493] = 2, + ACTIONS(2941), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90501] = 2, + ACTIONS(2943), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90509] = 2, + ACTIONS(2945), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90517] = 2, + ACTIONS(2947), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90525] = 2, + ACTIONS(2949), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90533] = 2, + ACTIONS(2951), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90541] = 2, + ACTIONS(2953), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90549] = 2, + ACTIONS(2955), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90557] = 2, + ACTIONS(2957), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90565] = 2, + ACTIONS(2959), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90573] = 2, + ACTIONS(2961), 1, + anon_sym_DASH_DASH_DASH, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90581] = 2, + ACTIONS(2963), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90589] = 2, + ACTIONS(2965), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90597] = 2, + ACTIONS(2967), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90605] = 2, + ACTIONS(2969), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90613] = 2, + ACTIONS(2971), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90621] = 2, + ACTIONS(2973), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90629] = 2, + ACTIONS(2975), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90637] = 2, + ACTIONS(2977), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90645] = 2, + ACTIONS(2979), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90653] = 2, + ACTIONS(2981), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90661] = 2, + ACTIONS(2983), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90669] = 2, + ACTIONS(2985), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90677] = 2, + ACTIONS(2987), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90685] = 2, + ACTIONS(2989), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90693] = 2, + ACTIONS(2047), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90701] = 2, + ACTIONS(2991), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90709] = 2, + ACTIONS(2993), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90717] = 2, + ACTIONS(2995), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90725] = 2, + ACTIONS(1778), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90733] = 2, + ACTIONS(2997), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90741] = 2, + ACTIONS(2999), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90749] = 2, + ACTIONS(3001), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90757] = 2, + ACTIONS(3003), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90765] = 2, + ACTIONS(3001), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90773] = 2, + ACTIONS(2937), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90781] = 2, + ACTIONS(3005), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90789] = 2, + ACTIONS(1774), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90797] = 2, + ACTIONS(3007), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90805] = 2, + ACTIONS(3009), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90813] = 2, + ACTIONS(3011), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90821] = 2, + ACTIONS(3013), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90829] = 2, + ACTIONS(3015), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90837] = 2, + ACTIONS(3017), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90845] = 2, + ACTIONS(3019), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90853] = 2, + ACTIONS(3021), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90861] = 2, + ACTIONS(3023), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90869] = 2, + ACTIONS(3025), 1, + anon_sym_catch, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90877] = 2, + ACTIONS(3027), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90885] = 2, + ACTIONS(3029), 1, + aux_sym_constant_char_token1, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [90893] = 2, + ACTIONS(3031), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90901] = 2, + ACTIONS(3033), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90909] = 2, + ACTIONS(3035), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90917] = 2, + ACTIONS(2037), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90925] = 2, + ACTIONS(2037), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90933] = 2, + ACTIONS(3037), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90941] = 2, + ACTIONS(3039), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90949] = 2, + ACTIONS(3041), 1, + anon_sym_finally, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90957] = 2, + ACTIONS(3043), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90965] = 2, + ACTIONS(3045), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90973] = 2, + ACTIONS(3047), 1, + anon_sym_finally, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90981] = 2, + ACTIONS(3049), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90989] = 2, + ACTIONS(3051), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [90997] = 2, + ACTIONS(3053), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91005] = 2, + ACTIONS(3055), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91013] = 2, + ACTIONS(3057), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91021] = 2, + ACTIONS(3059), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91029] = 2, + ACTIONS(3061), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91037] = 2, + ACTIONS(3063), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91045] = 2, + ACTIONS(3065), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91053] = 2, + ACTIONS(3067), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91061] = 2, + ACTIONS(3069), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91069] = 2, + ACTIONS(3071), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91077] = 2, + ACTIONS(3073), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91085] = 2, + ACTIONS(3075), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91093] = 2, + ACTIONS(3077), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91101] = 2, + ACTIONS(3079), 1, + anon_sym_finally, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91109] = 2, + ACTIONS(3081), 1, + anon_sym_catch, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91117] = 2, + ACTIONS(3083), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91125] = 2, + ACTIONS(3085), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91133] = 2, + ACTIONS(3087), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91141] = 2, + ACTIONS(3089), 1, + anon_sym_LBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91149] = 2, + ACTIONS(3091), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91157] = 2, + ACTIONS(3093), 1, + anon_sym_SQUOTE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91165] = 2, + ACTIONS(3095), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91173] = 2, + ACTIONS(3097), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91181] = 2, + ACTIONS(3099), 1, + anon_sym_LBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91189] = 2, + ACTIONS(2891), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91197] = 2, + ACTIONS(3101), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91205] = 2, + ACTIONS(3103), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91213] = 2, + ACTIONS(3105), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91221] = 2, + ACTIONS(3107), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91229] = 2, + ACTIONS(3109), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91237] = 2, + ACTIONS(3111), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91245] = 2, + ACTIONS(3113), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91253] = 2, + ACTIONS(3115), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91261] = 2, + ACTIONS(3117), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91269] = 2, + ACTIONS(3119), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91277] = 2, + ACTIONS(3121), 1, + anon_sym_COLON, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91285] = 2, + ACTIONS(3123), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91293] = 2, + ACTIONS(3125), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91301] = 2, + ACTIONS(3127), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91309] = 2, + ACTIONS(3129), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91317] = 2, + ACTIONS(3131), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91325] = 2, + ACTIONS(3133), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91333] = 2, + ACTIONS(3135), 1, + anon_sym_RBRACE, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91341] = 2, + ACTIONS(3137), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91349] = 2, + ACTIONS(3139), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91357] = 2, + ACTIONS(3141), 1, + sym_name, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, + [91365] = 2, + ACTIONS(3143), 1, + aux_sym_constant_char_token1, + ACTIONS(2257), 2, + sym__whitespace, + sym_line_comment, + [91373] = 2, + ACTIONS(3145), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym__whitespace, + sym_line_comment, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(44)] = 0, + [SMALL_STATE(45)] = 125, + [SMALL_STATE(46)] = 250, + [SMALL_STATE(47)] = 375, + [SMALL_STATE(48)] = 500, + [SMALL_STATE(49)] = 622, + [SMALL_STATE(50)] = 744, + [SMALL_STATE(51)] = 863, + [SMALL_STATE(52)] = 981, + [SMALL_STATE(53)] = 1051, + [SMALL_STATE(54)] = 1169, + [SMALL_STATE(55)] = 1263, + [SMALL_STATE(56)] = 1381, + [SMALL_STATE(57)] = 1499, + [SMALL_STATE(58)] = 1617, + [SMALL_STATE(59)] = 1735, + [SMALL_STATE(60)] = 1853, + [SMALL_STATE(61)] = 1971, + [SMALL_STATE(62)] = 2087, + [SMALL_STATE(63)] = 2205, + [SMALL_STATE(64)] = 2323, + [SMALL_STATE(65)] = 2441, + [SMALL_STATE(66)] = 2557, + [SMALL_STATE(67)] = 2675, + [SMALL_STATE(68)] = 2745, + [SMALL_STATE(69)] = 2860, + [SMALL_STATE(70)] = 2929, + [SMALL_STATE(71)] = 2998, + [SMALL_STATE(72)] = 3067, + [SMALL_STATE(73)] = 3182, + [SMALL_STATE(74)] = 3275, + [SMALL_STATE(75)] = 3368, + [SMALL_STATE(76)] = 3437, + [SMALL_STATE(77)] = 3549, + [SMALL_STATE(78)] = 3661, + [SMALL_STATE(79)] = 3773, + [SMALL_STATE(80)] = 3885, + [SMALL_STATE(81)] = 3997, + [SMALL_STATE(82)] = 4109, + [SMALL_STATE(83)] = 4221, + [SMALL_STATE(84)] = 4333, + [SMALL_STATE(85)] = 4445, + [SMALL_STATE(86)] = 4557, + [SMALL_STATE(87)] = 4669, + [SMALL_STATE(88)] = 4781, + [SMALL_STATE(89)] = 4893, + [SMALL_STATE(90)] = 5005, + [SMALL_STATE(91)] = 5117, + [SMALL_STATE(92)] = 5229, + [SMALL_STATE(93)] = 5341, + [SMALL_STATE(94)] = 5453, + [SMALL_STATE(95)] = 5565, + [SMALL_STATE(96)] = 5677, + [SMALL_STATE(97)] = 5789, + [SMALL_STATE(98)] = 5901, + [SMALL_STATE(99)] = 6013, + [SMALL_STATE(100)] = 6125, + [SMALL_STATE(101)] = 6237, + [SMALL_STATE(102)] = 6349, + [SMALL_STATE(103)] = 6461, + [SMALL_STATE(104)] = 6573, + [SMALL_STATE(105)] = 6685, + [SMALL_STATE(106)] = 6797, + [SMALL_STATE(107)] = 6909, + [SMALL_STATE(108)] = 7021, + [SMALL_STATE(109)] = 7133, + [SMALL_STATE(110)] = 7245, + [SMALL_STATE(111)] = 7357, + [SMALL_STATE(112)] = 7469, + [SMALL_STATE(113)] = 7581, + [SMALL_STATE(114)] = 7693, + [SMALL_STATE(115)] = 7805, + [SMALL_STATE(116)] = 7917, + [SMALL_STATE(117)] = 8029, + [SMALL_STATE(118)] = 8141, + [SMALL_STATE(119)] = 8253, + [SMALL_STATE(120)] = 8365, + [SMALL_STATE(121)] = 8477, + [SMALL_STATE(122)] = 8589, + [SMALL_STATE(123)] = 8701, + [SMALL_STATE(124)] = 8813, + [SMALL_STATE(125)] = 8925, + [SMALL_STATE(126)] = 9037, + [SMALL_STATE(127)] = 9149, + [SMALL_STATE(128)] = 9261, + [SMALL_STATE(129)] = 9373, + [SMALL_STATE(130)] = 9485, + [SMALL_STATE(131)] = 9597, + [SMALL_STATE(132)] = 9709, + [SMALL_STATE(133)] = 9821, + [SMALL_STATE(134)] = 9933, + [SMALL_STATE(135)] = 10045, + [SMALL_STATE(136)] = 10157, + [SMALL_STATE(137)] = 10269, + [SMALL_STATE(138)] = 10381, + [SMALL_STATE(139)] = 10493, + [SMALL_STATE(140)] = 10605, + [SMALL_STATE(141)] = 10717, + [SMALL_STATE(142)] = 10829, + [SMALL_STATE(143)] = 10941, + [SMALL_STATE(144)] = 11053, + [SMALL_STATE(145)] = 11165, + [SMALL_STATE(146)] = 11277, + [SMALL_STATE(147)] = 11345, + [SMALL_STATE(148)] = 11457, + [SMALL_STATE(149)] = 11525, + [SMALL_STATE(150)] = 11637, + [SMALL_STATE(151)] = 11749, + [SMALL_STATE(152)] = 11861, + [SMALL_STATE(153)] = 11973, + [SMALL_STATE(154)] = 12085, + [SMALL_STATE(155)] = 12197, + [SMALL_STATE(156)] = 12309, + [SMALL_STATE(157)] = 12421, + [SMALL_STATE(158)] = 12533, + [SMALL_STATE(159)] = 12645, + [SMALL_STATE(160)] = 12757, + [SMALL_STATE(161)] = 12869, + [SMALL_STATE(162)] = 12981, + [SMALL_STATE(163)] = 13093, + [SMALL_STATE(164)] = 13205, + [SMALL_STATE(165)] = 13317, + [SMALL_STATE(166)] = 13385, + [SMALL_STATE(167)] = 13497, + [SMALL_STATE(168)] = 13609, + [SMALL_STATE(169)] = 13721, + [SMALL_STATE(170)] = 13833, + [SMALL_STATE(171)] = 13945, + [SMALL_STATE(172)] = 14057, + [SMALL_STATE(173)] = 14169, + [SMALL_STATE(174)] = 14281, + [SMALL_STATE(175)] = 14349, + [SMALL_STATE(176)] = 14461, + [SMALL_STATE(177)] = 14573, + [SMALL_STATE(178)] = 14685, + [SMALL_STATE(179)] = 14797, + [SMALL_STATE(180)] = 14909, + [SMALL_STATE(181)] = 15021, + [SMALL_STATE(182)] = 15133, + [SMALL_STATE(183)] = 15245, + [SMALL_STATE(184)] = 15357, + [SMALL_STATE(185)] = 15469, + [SMALL_STATE(186)] = 15581, + [SMALL_STATE(187)] = 15693, + [SMALL_STATE(188)] = 15805, + [SMALL_STATE(189)] = 15917, + [SMALL_STATE(190)] = 16029, + [SMALL_STATE(191)] = 16141, + [SMALL_STATE(192)] = 16253, + [SMALL_STATE(193)] = 16365, + [SMALL_STATE(194)] = 16477, + [SMALL_STATE(195)] = 16589, + [SMALL_STATE(196)] = 16701, + [SMALL_STATE(197)] = 16813, + [SMALL_STATE(198)] = 16925, + [SMALL_STATE(199)] = 17037, + [SMALL_STATE(200)] = 17149, + [SMALL_STATE(201)] = 17261, + [SMALL_STATE(202)] = 17373, + [SMALL_STATE(203)] = 17485, + [SMALL_STATE(204)] = 17597, + [SMALL_STATE(205)] = 17709, + [SMALL_STATE(206)] = 17821, + [SMALL_STATE(207)] = 17933, + [SMALL_STATE(208)] = 18045, + [SMALL_STATE(209)] = 18157, + [SMALL_STATE(210)] = 18269, + [SMALL_STATE(211)] = 18381, + [SMALL_STATE(212)] = 18473, + [SMALL_STATE(213)] = 18585, + [SMALL_STATE(214)] = 18697, + [SMALL_STATE(215)] = 18809, + [SMALL_STATE(216)] = 18901, + [SMALL_STATE(217)] = 19013, + [SMALL_STATE(218)] = 19125, + [SMALL_STATE(219)] = 19237, + [SMALL_STATE(220)] = 19349, + [SMALL_STATE(221)] = 19461, + [SMALL_STATE(222)] = 19573, + [SMALL_STATE(223)] = 19685, + [SMALL_STATE(224)] = 19797, + [SMALL_STATE(225)] = 19909, + [SMALL_STATE(226)] = 20021, + [SMALL_STATE(227)] = 20133, + [SMALL_STATE(228)] = 20245, + [SMALL_STATE(229)] = 20357, + [SMALL_STATE(230)] = 20469, + [SMALL_STATE(231)] = 20581, + [SMALL_STATE(232)] = 20693, + [SMALL_STATE(233)] = 20805, + [SMALL_STATE(234)] = 20917, + [SMALL_STATE(235)] = 21029, + [SMALL_STATE(236)] = 21141, + [SMALL_STATE(237)] = 21253, + [SMALL_STATE(238)] = 21365, + [SMALL_STATE(239)] = 21477, + [SMALL_STATE(240)] = 21589, + [SMALL_STATE(241)] = 21701, + [SMALL_STATE(242)] = 21813, + [SMALL_STATE(243)] = 21925, + [SMALL_STATE(244)] = 22037, + [SMALL_STATE(245)] = 22149, + [SMALL_STATE(246)] = 22261, + [SMALL_STATE(247)] = 22373, + [SMALL_STATE(248)] = 22485, + [SMALL_STATE(249)] = 22597, + [SMALL_STATE(250)] = 22709, + [SMALL_STATE(251)] = 22821, + [SMALL_STATE(252)] = 22933, + [SMALL_STATE(253)] = 23045, + [SMALL_STATE(254)] = 23157, + [SMALL_STATE(255)] = 23269, + [SMALL_STATE(256)] = 23381, + [SMALL_STATE(257)] = 23493, + [SMALL_STATE(258)] = 23605, + [SMALL_STATE(259)] = 23717, + [SMALL_STATE(260)] = 23829, + [SMALL_STATE(261)] = 23941, + [SMALL_STATE(262)] = 24053, + [SMALL_STATE(263)] = 24165, + [SMALL_STATE(264)] = 24277, + [SMALL_STATE(265)] = 24389, + [SMALL_STATE(266)] = 24501, + [SMALL_STATE(267)] = 24613, + [SMALL_STATE(268)] = 24725, + [SMALL_STATE(269)] = 24837, + [SMALL_STATE(270)] = 24949, + [SMALL_STATE(271)] = 25061, + [SMALL_STATE(272)] = 25173, + [SMALL_STATE(273)] = 25285, + [SMALL_STATE(274)] = 25397, + [SMALL_STATE(275)] = 25509, + [SMALL_STATE(276)] = 25621, + [SMALL_STATE(277)] = 25733, + [SMALL_STATE(278)] = 25845, + [SMALL_STATE(279)] = 25957, + [SMALL_STATE(280)] = 26069, + [SMALL_STATE(281)] = 26181, + [SMALL_STATE(282)] = 26293, + [SMALL_STATE(283)] = 26405, + [SMALL_STATE(284)] = 26517, + [SMALL_STATE(285)] = 26629, + [SMALL_STATE(286)] = 26741, + [SMALL_STATE(287)] = 26853, + [SMALL_STATE(288)] = 26965, + [SMALL_STATE(289)] = 27077, + [SMALL_STATE(290)] = 27189, + [SMALL_STATE(291)] = 27301, + [SMALL_STATE(292)] = 27413, + [SMALL_STATE(293)] = 27525, + [SMALL_STATE(294)] = 27637, + [SMALL_STATE(295)] = 27749, + [SMALL_STATE(296)] = 27861, + [SMALL_STATE(297)] = 27973, + [SMALL_STATE(298)] = 28085, + [SMALL_STATE(299)] = 28197, + [SMALL_STATE(300)] = 28309, + [SMALL_STATE(301)] = 28421, + [SMALL_STATE(302)] = 28533, + [SMALL_STATE(303)] = 28645, + [SMALL_STATE(304)] = 28757, + [SMALL_STATE(305)] = 28869, + [SMALL_STATE(306)] = 28981, + [SMALL_STATE(307)] = 29093, + [SMALL_STATE(308)] = 29205, + [SMALL_STATE(309)] = 29317, + [SMALL_STATE(310)] = 29429, + [SMALL_STATE(311)] = 29541, + [SMALL_STATE(312)] = 29653, + [SMALL_STATE(313)] = 29765, + [SMALL_STATE(314)] = 29877, + [SMALL_STATE(315)] = 29989, + [SMALL_STATE(316)] = 30101, + [SMALL_STATE(317)] = 30213, + [SMALL_STATE(318)] = 30325, + [SMALL_STATE(319)] = 30437, + [SMALL_STATE(320)] = 30549, + [SMALL_STATE(321)] = 30661, + [SMALL_STATE(322)] = 30773, + [SMALL_STATE(323)] = 30885, + [SMALL_STATE(324)] = 30997, + [SMALL_STATE(325)] = 31109, + [SMALL_STATE(326)] = 31221, + [SMALL_STATE(327)] = 31333, + [SMALL_STATE(328)] = 31445, + [SMALL_STATE(329)] = 31557, + [SMALL_STATE(330)] = 31669, + [SMALL_STATE(331)] = 31781, + [SMALL_STATE(332)] = 31893, + [SMALL_STATE(333)] = 32005, + [SMALL_STATE(334)] = 32117, + [SMALL_STATE(335)] = 32229, + [SMALL_STATE(336)] = 32341, + [SMALL_STATE(337)] = 32453, + [SMALL_STATE(338)] = 32565, + [SMALL_STATE(339)] = 32677, + [SMALL_STATE(340)] = 32789, + [SMALL_STATE(341)] = 32901, + [SMALL_STATE(342)] = 33013, + [SMALL_STATE(343)] = 33125, + [SMALL_STATE(344)] = 33237, + [SMALL_STATE(345)] = 33349, + [SMALL_STATE(346)] = 33461, + [SMALL_STATE(347)] = 33573, + [SMALL_STATE(348)] = 33685, + [SMALL_STATE(349)] = 33797, + [SMALL_STATE(350)] = 33909, + [SMALL_STATE(351)] = 34021, + [SMALL_STATE(352)] = 34133, + [SMALL_STATE(353)] = 34245, + [SMALL_STATE(354)] = 34357, + [SMALL_STATE(355)] = 34469, + [SMALL_STATE(356)] = 34581, + [SMALL_STATE(357)] = 34693, + [SMALL_STATE(358)] = 34805, + [SMALL_STATE(359)] = 34917, + [SMALL_STATE(360)] = 35029, + [SMALL_STATE(361)] = 35141, + [SMALL_STATE(362)] = 35253, + [SMALL_STATE(363)] = 35365, + [SMALL_STATE(364)] = 35477, + [SMALL_STATE(365)] = 35589, + [SMALL_STATE(366)] = 35701, + [SMALL_STATE(367)] = 35813, + [SMALL_STATE(368)] = 35925, + [SMALL_STATE(369)] = 36037, + [SMALL_STATE(370)] = 36149, + [SMALL_STATE(371)] = 36261, + [SMALL_STATE(372)] = 36373, + [SMALL_STATE(373)] = 36485, + [SMALL_STATE(374)] = 36597, + [SMALL_STATE(375)] = 36709, + [SMALL_STATE(376)] = 36821, + [SMALL_STATE(377)] = 36933, + [SMALL_STATE(378)] = 37045, + [SMALL_STATE(379)] = 37157, + [SMALL_STATE(380)] = 37269, + [SMALL_STATE(381)] = 37381, + [SMALL_STATE(382)] = 37493, + [SMALL_STATE(383)] = 37605, + [SMALL_STATE(384)] = 37717, + [SMALL_STATE(385)] = 37829, + [SMALL_STATE(386)] = 37941, + [SMALL_STATE(387)] = 38053, + [SMALL_STATE(388)] = 38165, + [SMALL_STATE(389)] = 38277, + [SMALL_STATE(390)] = 38389, + [SMALL_STATE(391)] = 38501, + [SMALL_STATE(392)] = 38613, + [SMALL_STATE(393)] = 38725, + [SMALL_STATE(394)] = 38837, + [SMALL_STATE(395)] = 38949, + [SMALL_STATE(396)] = 39061, + [SMALL_STATE(397)] = 39173, + [SMALL_STATE(398)] = 39285, + [SMALL_STATE(399)] = 39397, + [SMALL_STATE(400)] = 39509, + [SMALL_STATE(401)] = 39621, + [SMALL_STATE(402)] = 39733, + [SMALL_STATE(403)] = 39824, + [SMALL_STATE(404)] = 39891, + [SMALL_STATE(405)] = 39982, + [SMALL_STATE(406)] = 40073, + [SMALL_STATE(407)] = 40140, + [SMALL_STATE(408)] = 40205, + [SMALL_STATE(409)] = 40270, + [SMALL_STATE(410)] = 40359, + [SMALL_STATE(411)] = 40423, + [SMALL_STATE(412)] = 40511, + [SMALL_STATE(413)] = 40575, + [SMALL_STATE(414)] = 40663, + [SMALL_STATE(415)] = 40727, + [SMALL_STATE(416)] = 40791, + [SMALL_STATE(417)] = 40854, + [SMALL_STATE(418)] = 40917, + [SMALL_STATE(419)] = 41004, + [SMALL_STATE(420)] = 41091, + [SMALL_STATE(421)] = 41154, + [SMALL_STATE(422)] = 41241, + [SMALL_STATE(423)] = 41304, + [SMALL_STATE(424)] = 41391, + [SMALL_STATE(425)] = 41477, + [SMALL_STATE(426)] = 41539, + [SMALL_STATE(427)] = 41601, + [SMALL_STATE(428)] = 41687, + [SMALL_STATE(429)] = 41773, + [SMALL_STATE(430)] = 41829, + [SMALL_STATE(431)] = 41913, + [SMALL_STATE(432)] = 41969, + [SMALL_STATE(433)] = 42025, + [SMALL_STATE(434)] = 42081, + [SMALL_STATE(435)] = 42139, + [SMALL_STATE(436)] = 42197, + [SMALL_STATE(437)] = 42253, + [SMALL_STATE(438)] = 42311, + [SMALL_STATE(439)] = 42367, + [SMALL_STATE(440)] = 42425, + [SMALL_STATE(441)] = 42483, + [SMALL_STATE(442)] = 42541, + [SMALL_STATE(443)] = 42597, + [SMALL_STATE(444)] = 42653, + [SMALL_STATE(445)] = 42741, + [SMALL_STATE(446)] = 42825, + [SMALL_STATE(447)] = 42881, + [SMALL_STATE(448)] = 42969, + [SMALL_STATE(449)] = 43027, + [SMALL_STATE(450)] = 43113, + [SMALL_STATE(451)] = 43199, + [SMALL_STATE(452)] = 43255, + [SMALL_STATE(453)] = 43313, + [SMALL_STATE(454)] = 43369, + [SMALL_STATE(455)] = 43427, + [SMALL_STATE(456)] = 43483, + [SMALL_STATE(457)] = 43541, + [SMALL_STATE(458)] = 43597, + [SMALL_STATE(459)] = 43653, + [SMALL_STATE(460)] = 43709, + [SMALL_STATE(461)] = 43767, + [SMALL_STATE(462)] = 43823, + [SMALL_STATE(463)] = 43906, + [SMALL_STATE(464)] = 43991, + [SMALL_STATE(465)] = 44046, + [SMALL_STATE(466)] = 44101, + [SMALL_STATE(467)] = 44184, + [SMALL_STATE(468)] = 44239, + [SMALL_STATE(469)] = 44294, + [SMALL_STATE(470)] = 44349, + [SMALL_STATE(471)] = 44404, + [SMALL_STATE(472)] = 44459, + [SMALL_STATE(473)] = 44514, + [SMALL_STATE(474)] = 44571, + [SMALL_STATE(475)] = 44626, + [SMALL_STATE(476)] = 44681, + [SMALL_STATE(477)] = 44736, + [SMALL_STATE(478)] = 44791, + [SMALL_STATE(479)] = 44846, + [SMALL_STATE(480)] = 44905, + [SMALL_STATE(481)] = 44960, + [SMALL_STATE(482)] = 45019, + [SMALL_STATE(483)] = 45074, + [SMALL_STATE(484)] = 45129, + [SMALL_STATE(485)] = 45184, + [SMALL_STATE(486)] = 45239, + [SMALL_STATE(487)] = 45294, + [SMALL_STATE(488)] = 45349, + [SMALL_STATE(489)] = 45404, + [SMALL_STATE(490)] = 45463, + [SMALL_STATE(491)] = 45518, + [SMALL_STATE(492)] = 45573, + [SMALL_STATE(493)] = 45632, + [SMALL_STATE(494)] = 45687, + [SMALL_STATE(495)] = 45772, + [SMALL_STATE(496)] = 45827, + [SMALL_STATE(497)] = 45882, + [SMALL_STATE(498)] = 45937, + [SMALL_STATE(499)] = 45992, + [SMALL_STATE(500)] = 46047, + [SMALL_STATE(501)] = 46102, + [SMALL_STATE(502)] = 46157, + [SMALL_STATE(503)] = 46212, + [SMALL_STATE(504)] = 46267, + [SMALL_STATE(505)] = 46354, + [SMALL_STATE(506)] = 46441, + [SMALL_STATE(507)] = 46496, + [SMALL_STATE(508)] = 46551, + [SMALL_STATE(509)] = 46616, + [SMALL_STATE(510)] = 46675, + [SMALL_STATE(511)] = 46730, + [SMALL_STATE(512)] = 46785, + [SMALL_STATE(513)] = 46840, + [SMALL_STATE(514)] = 46895, + [SMALL_STATE(515)] = 46950, + [SMALL_STATE(516)] = 47005, + [SMALL_STATE(517)] = 47060, + [SMALL_STATE(518)] = 47119, + [SMALL_STATE(519)] = 47174, + [SMALL_STATE(520)] = 47229, + [SMALL_STATE(521)] = 47284, + [SMALL_STATE(522)] = 47343, + [SMALL_STATE(523)] = 47424, + [SMALL_STATE(524)] = 47483, + [SMALL_STATE(525)] = 47538, + [SMALL_STATE(526)] = 47593, + [SMALL_STATE(527)] = 47648, + [SMALL_STATE(528)] = 47728, + [SMALL_STATE(529)] = 47812, + [SMALL_STATE(530)] = 47896, + [SMALL_STATE(531)] = 47974, + [SMALL_STATE(532)] = 48058, + [SMALL_STATE(533)] = 48138, + [SMALL_STATE(534)] = 48216, + [SMALL_STATE(535)] = 48294, + [SMALL_STATE(536)] = 48360, + [SMALL_STATE(537)] = 48428, + [SMALL_STATE(538)] = 48510, + [SMALL_STATE(539)] = 48582, + [SMALL_STATE(540)] = 48662, + [SMALL_STATE(541)] = 48740, + [SMALL_STATE(542)] = 48822, + [SMALL_STATE(543)] = 48904, + [SMALL_STATE(544)] = 48978, + [SMALL_STATE(545)] = 49060, + [SMALL_STATE(546)] = 49142, + [SMALL_STATE(547)] = 49226, + [SMALL_STATE(548)] = 49304, + [SMALL_STATE(549)] = 49388, + [SMALL_STATE(550)] = 49472, + [SMALL_STATE(551)] = 49555, + [SMALL_STATE(552)] = 49636, + [SMALL_STATE(553)] = 49717, + [SMALL_STATE(554)] = 49798, + [SMALL_STATE(555)] = 49881, + [SMALL_STATE(556)] = 49958, + [SMALL_STATE(557)] = 50041, + [SMALL_STATE(558)] = 50124, + [SMALL_STATE(559)] = 50207, + [SMALL_STATE(560)] = 50290, + [SMALL_STATE(561)] = 50373, + [SMALL_STATE(562)] = 50450, + [SMALL_STATE(563)] = 50533, + [SMALL_STATE(564)] = 50616, + [SMALL_STATE(565)] = 50697, + [SMALL_STATE(566)] = 50776, + [SMALL_STATE(567)] = 50855, + [SMALL_STATE(568)] = 50936, + [SMALL_STATE(569)] = 51017, + [SMALL_STATE(570)] = 51084, + [SMALL_STATE(571)] = 51161, + [SMALL_STATE(572)] = 51238, + [SMALL_STATE(573)] = 51315, + [SMALL_STATE(574)] = 51396, + [SMALL_STATE(575)] = 51479, + [SMALL_STATE(576)] = 51544, + [SMALL_STATE(577)] = 51627, + [SMALL_STATE(578)] = 51694, + [SMALL_STATE(579)] = 51777, + [SMALL_STATE(580)] = 51848, + [SMALL_STATE(581)] = 51925, + [SMALL_STATE(582)] = 51998, + [SMALL_STATE(583)] = 52079, + [SMALL_STATE(584)] = 52160, + [SMALL_STATE(585)] = 52233, + [SMALL_STATE(586)] = 52304, + [SMALL_STATE(587)] = 52381, + [SMALL_STATE(588)] = 52458, + [SMALL_STATE(589)] = 52535, + [SMALL_STATE(590)] = 52600, + [SMALL_STATE(591)] = 52672, + [SMALL_STATE(592)] = 52744, + [SMALL_STATE(593)] = 52824, + [SMALL_STATE(594)] = 52906, + [SMALL_STATE(595)] = 52988, + [SMALL_STATE(596)] = 53064, + [SMALL_STATE(597)] = 53146, + [SMALL_STATE(598)] = 53216, + [SMALL_STATE(599)] = 53282, + [SMALL_STATE(600)] = 53346, + [SMALL_STATE(601)] = 53422, + [SMALL_STATE(602)] = 53498, + [SMALL_STATE(603)] = 53574, + [SMALL_STATE(604)] = 53656, + [SMALL_STATE(605)] = 53738, + [SMALL_STATE(606)] = 53818, + [SMALL_STATE(607)] = 53898, + [SMALL_STATE(608)] = 53980, + [SMALL_STATE(609)] = 54060, + [SMALL_STATE(610)] = 54138, + [SMALL_STATE(611)] = 54218, + [SMALL_STATE(612)] = 54300, + [SMALL_STATE(613)] = 54376, + [SMALL_STATE(614)] = 54458, + [SMALL_STATE(615)] = 54540, + [SMALL_STATE(616)] = 54610, + [SMALL_STATE(617)] = 54676, + [SMALL_STATE(618)] = 54752, + [SMALL_STATE(619)] = 54834, + [SMALL_STATE(620)] = 54916, + [SMALL_STATE(621)] = 54996, + [SMALL_STATE(622)] = 55076, + [SMALL_STATE(623)] = 55140, + [SMALL_STATE(624)] = 55216, + [SMALL_STATE(625)] = 55296, + [SMALL_STATE(626)] = 55372, + [SMALL_STATE(627)] = 55448, + [SMALL_STATE(628)] = 55529, + [SMALL_STATE(629)] = 55612, + [SMALL_STATE(630)] = 55693, + [SMALL_STATE(631)] = 55772, + [SMALL_STATE(632)] = 55851, + [SMALL_STATE(633)] = 55930, + [SMALL_STATE(634)] = 56005, + [SMALL_STATE(635)] = 56080, + [SMALL_STATE(636)] = 56143, + [SMALL_STATE(637)] = 56208, + [SMALL_STATE(638)] = 56277, + [SMALL_STATE(639)] = 56352, + [SMALL_STATE(640)] = 56423, + [SMALL_STATE(641)] = 56502, + [SMALL_STATE(642)] = 56583, + [SMALL_STATE(643)] = 56658, + [SMALL_STATE(644)] = 56741, + [SMALL_STATE(645)] = 56822, + [SMALL_STATE(646)] = 56903, + [SMALL_STATE(647)] = 56982, + [SMALL_STATE(648)] = 57061, + [SMALL_STATE(649)] = 57142, + [SMALL_STATE(650)] = 57223, + [SMALL_STATE(651)] = 57305, + [SMALL_STATE(652)] = 57385, + [SMALL_STATE(653)] = 57463, + [SMALL_STATE(654)] = 57541, + [SMALL_STATE(655)] = 57629, + [SMALL_STATE(656)] = 57711, + [SMALL_STATE(657)] = 57799, + [SMALL_STATE(658)] = 57875, + [SMALL_STATE(659)] = 57955, + [SMALL_STATE(660)] = 58028, + [SMALL_STATE(661)] = 58101, + [SMALL_STATE(662)] = 58176, + [SMALL_STATE(663)] = 58253, + [SMALL_STATE(664)] = 58328, + [SMALL_STATE(665)] = 58401, + [SMALL_STATE(666)] = 58480, + [SMALL_STATE(667)] = 58557, + [SMALL_STATE(668)] = 58632, + [SMALL_STATE(669)] = 58699, + [SMALL_STATE(670)] = 58778, + [SMALL_STATE(671)] = 58857, + [SMALL_STATE(672)] = 58934, + [SMALL_STATE(673)] = 59003, + [SMALL_STATE(674)] = 59082, + [SMALL_STATE(675)] = 59159, + [SMALL_STATE(676)] = 59232, + [SMALL_STATE(677)] = 59311, + [SMALL_STATE(678)] = 59374, + [SMALL_STATE(679)] = 59435, + [SMALL_STATE(680)] = 59514, + [SMALL_STATE(681)] = 59563, + [SMALL_STATE(682)] = 59640, + [SMALL_STATE(683)] = 59713, + [SMALL_STATE(684)] = 59787, + [SMALL_STATE(685)] = 59853, + [SMALL_STATE(686)] = 59929, + [SMALL_STATE(687)] = 60005, + [SMALL_STATE(688)] = 60081, + [SMALL_STATE(689)] = 60157, + [SMALL_STATE(690)] = 60233, + [SMALL_STATE(691)] = 60309, + [SMALL_STATE(692)] = 60387, + [SMALL_STATE(693)] = 60459, + [SMALL_STATE(694)] = 60535, + [SMALL_STATE(695)] = 60613, + [SMALL_STATE(696)] = 60685, + [SMALL_STATE(697)] = 60757, + [SMALL_STATE(698)] = 60829, + [SMALL_STATE(699)] = 60889, + [SMALL_STATE(700)] = 60951, + [SMALL_STATE(701)] = 61017, + [SMALL_STATE(702)] = 61089, + [SMALL_STATE(703)] = 61157, + [SMALL_STATE(704)] = 61231, + [SMALL_STATE(705)] = 61309, + [SMALL_STATE(706)] = 61385, + [SMALL_STATE(707)] = 61457, + [SMALL_STATE(708)] = 61519, + [SMALL_STATE(709)] = 61579, + [SMALL_STATE(710)] = 61657, + [SMALL_STATE(711)] = 61735, + [SMALL_STATE(712)] = 61817, + [SMALL_STATE(713)] = 61893, + [SMALL_STATE(714)] = 61971, + [SMALL_STATE(715)] = 62049, + [SMALL_STATE(716)] = 62117, + [SMALL_STATE(717)] = 62189, + [SMALL_STATE(718)] = 62267, + [SMALL_STATE(719)] = 62339, + [SMALL_STATE(720)] = 62417, + [SMALL_STATE(721)] = 62495, + [SMALL_STATE(722)] = 62573, + [SMALL_STATE(723)] = 62645, + [SMALL_STATE(724)] = 62723, + [SMALL_STATE(725)] = 62800, + [SMALL_STATE(726)] = 62877, + [SMALL_STATE(727)] = 62948, + [SMALL_STATE(728)] = 63023, + [SMALL_STATE(729)] = 63100, + [SMALL_STATE(730)] = 63173, + [SMALL_STATE(731)] = 63248, + [SMALL_STATE(732)] = 63323, + [SMALL_STATE(733)] = 63398, + [SMALL_STATE(734)] = 63465, + [SMALL_STATE(735)] = 63536, + [SMALL_STATE(736)] = 63603, + [SMALL_STATE(737)] = 63668, + [SMALL_STATE(738)] = 63739, + [SMALL_STATE(739)] = 63800, + [SMALL_STATE(740)] = 63859, + [SMALL_STATE(741)] = 63920, + [SMALL_STATE(742)] = 63985, + [SMALL_STATE(743)] = 64060, + [SMALL_STATE(744)] = 64135, + [SMALL_STATE(745)] = 64210, + [SMALL_STATE(746)] = 64269, + [SMALL_STATE(747)] = 64340, + [SMALL_STATE(748)] = 64415, + [SMALL_STATE(749)] = 64492, + [SMALL_STATE(750)] = 64571, + [SMALL_STATE(751)] = 64648, + [SMALL_STATE(752)] = 64719, + [SMALL_STATE(753)] = 64790, + [SMALL_STATE(754)] = 64861, + [SMALL_STATE(755)] = 64938, + [SMALL_STATE(756)] = 65015, + [SMALL_STATE(757)] = 65092, + [SMALL_STATE(758)] = 65163, + [SMALL_STATE(759)] = 65240, + [SMALL_STATE(760)] = 65317, + [SMALL_STATE(761)] = 65388, + [SMALL_STATE(762)] = 65465, + [SMALL_STATE(763)] = 65535, + [SMALL_STATE(764)] = 65611, + [SMALL_STATE(765)] = 65685, + [SMALL_STATE(766)] = 65759, + [SMALL_STATE(767)] = 65833, + [SMALL_STATE(768)] = 65909, + [SMALL_STATE(769)] = 65979, + [SMALL_STATE(770)] = 66053, + [SMALL_STATE(771)] = 66119, + [SMALL_STATE(772)] = 66189, + [SMALL_STATE(773)] = 66253, + [SMALL_STATE(774)] = 66313, + [SMALL_STATE(775)] = 66371, + [SMALL_STATE(776)] = 66447, + [SMALL_STATE(777)] = 66523, + [SMALL_STATE(778)] = 66599, + [SMALL_STATE(779)] = 66669, + [SMALL_STATE(780)] = 66745, + [SMALL_STATE(781)] = 66790, + [SMALL_STATE(782)] = 66835, + [SMALL_STATE(783)] = 66880, + [SMALL_STATE(784)] = 66925, + [SMALL_STATE(785)] = 66970, + [SMALL_STATE(786)] = 67015, + [SMALL_STATE(787)] = 67060, + [SMALL_STATE(788)] = 67105, + [SMALL_STATE(789)] = 67150, + [SMALL_STATE(790)] = 67195, + [SMALL_STATE(791)] = 67240, + [SMALL_STATE(792)] = 67285, + [SMALL_STATE(793)] = 67330, + [SMALL_STATE(794)] = 67375, + [SMALL_STATE(795)] = 67420, + [SMALL_STATE(796)] = 67465, + [SMALL_STATE(797)] = 67510, + [SMALL_STATE(798)] = 67555, + [SMALL_STATE(799)] = 67600, + [SMALL_STATE(800)] = 67645, + [SMALL_STATE(801)] = 67690, + [SMALL_STATE(802)] = 67735, + [SMALL_STATE(803)] = 67780, + [SMALL_STATE(804)] = 67825, + [SMALL_STATE(805)] = 67870, + [SMALL_STATE(806)] = 67915, + [SMALL_STATE(807)] = 67960, + [SMALL_STATE(808)] = 68005, + [SMALL_STATE(809)] = 68050, + [SMALL_STATE(810)] = 68095, + [SMALL_STATE(811)] = 68140, + [SMALL_STATE(812)] = 68185, + [SMALL_STATE(813)] = 68230, + [SMALL_STATE(814)] = 68275, + [SMALL_STATE(815)] = 68320, + [SMALL_STATE(816)] = 68365, + [SMALL_STATE(817)] = 68410, + [SMALL_STATE(818)] = 68455, + [SMALL_STATE(819)] = 68500, + [SMALL_STATE(820)] = 68545, + [SMALL_STATE(821)] = 68590, + [SMALL_STATE(822)] = 68635, + [SMALL_STATE(823)] = 68680, + [SMALL_STATE(824)] = 68725, + [SMALL_STATE(825)] = 68770, + [SMALL_STATE(826)] = 68815, + [SMALL_STATE(827)] = 68860, + [SMALL_STATE(828)] = 68905, + [SMALL_STATE(829)] = 68950, + [SMALL_STATE(830)] = 68995, + [SMALL_STATE(831)] = 69040, + [SMALL_STATE(832)] = 69085, + [SMALL_STATE(833)] = 69130, + [SMALL_STATE(834)] = 69175, + [SMALL_STATE(835)] = 69220, + [SMALL_STATE(836)] = 69264, + [SMALL_STATE(837)] = 69308, + [SMALL_STATE(838)] = 69352, + [SMALL_STATE(839)] = 69396, + [SMALL_STATE(840)] = 69440, + [SMALL_STATE(841)] = 69484, + [SMALL_STATE(842)] = 69528, + [SMALL_STATE(843)] = 69572, + [SMALL_STATE(844)] = 69616, + [SMALL_STATE(845)] = 69660, + [SMALL_STATE(846)] = 69704, + [SMALL_STATE(847)] = 69748, + [SMALL_STATE(848)] = 69792, + [SMALL_STATE(849)] = 69836, + [SMALL_STATE(850)] = 69880, + [SMALL_STATE(851)] = 69924, + [SMALL_STATE(852)] = 69968, + [SMALL_STATE(853)] = 70011, + [SMALL_STATE(854)] = 70054, + [SMALL_STATE(855)] = 70097, + [SMALL_STATE(856)] = 70139, + [SMALL_STATE(857)] = 70183, + [SMALL_STATE(858)] = 70227, + [SMALL_STATE(859)] = 70271, + [SMALL_STATE(860)] = 70315, + [SMALL_STATE(861)] = 70384, + [SMALL_STATE(862)] = 70425, + [SMALL_STATE(863)] = 70466, + [SMALL_STATE(864)] = 70507, + [SMALL_STATE(865)] = 70548, + [SMALL_STATE(866)] = 70589, + [SMALL_STATE(867)] = 70630, + [SMALL_STATE(868)] = 70699, + [SMALL_STATE(869)] = 70740, + [SMALL_STATE(870)] = 70809, + [SMALL_STATE(871)] = 70850, + [SMALL_STATE(872)] = 70891, + [SMALL_STATE(873)] = 70942, + [SMALL_STATE(874)] = 70983, + [SMALL_STATE(875)] = 71024, + [SMALL_STATE(876)] = 71065, + [SMALL_STATE(877)] = 71106, + [SMALL_STATE(878)] = 71147, + [SMALL_STATE(879)] = 71188, + [SMALL_STATE(880)] = 71229, + [SMALL_STATE(881)] = 71270, + [SMALL_STATE(882)] = 71311, + [SMALL_STATE(883)] = 71356, + [SMALL_STATE(884)] = 71397, + [SMALL_STATE(885)] = 71466, + [SMALL_STATE(886)] = 71507, + [SMALL_STATE(887)] = 71576, + [SMALL_STATE(888)] = 71617, + [SMALL_STATE(889)] = 71686, + [SMALL_STATE(890)] = 71727, + [SMALL_STATE(891)] = 71768, + [SMALL_STATE(892)] = 71809, + [SMALL_STATE(893)] = 71850, + [SMALL_STATE(894)] = 71891, + [SMALL_STATE(895)] = 71932, + [SMALL_STATE(896)] = 71973, + [SMALL_STATE(897)] = 72014, + [SMALL_STATE(898)] = 72083, + [SMALL_STATE(899)] = 72124, + [SMALL_STATE(900)] = 72165, + [SMALL_STATE(901)] = 72234, + [SMALL_STATE(902)] = 72300, + [SMALL_STATE(903)] = 72342, + [SMALL_STATE(904)] = 72406, + [SMALL_STATE(905)] = 72472, + [SMALL_STATE(906)] = 72538, + [SMALL_STATE(907)] = 72604, + [SMALL_STATE(908)] = 72670, + [SMALL_STATE(909)] = 72736, + [SMALL_STATE(910)] = 72800, + [SMALL_STATE(911)] = 72866, + [SMALL_STATE(912)] = 72932, + [SMALL_STATE(913)] = 72998, + [SMALL_STATE(914)] = 73061, + [SMALL_STATE(915)] = 73124, + [SMALL_STATE(916)] = 73183, + [SMALL_STATE(917)] = 73246, + [SMALL_STATE(918)] = 73307, + [SMALL_STATE(919)] = 73370, + [SMALL_STATE(920)] = 73433, + [SMALL_STATE(921)] = 73496, + [SMALL_STATE(922)] = 73559, + [SMALL_STATE(923)] = 73624, + [SMALL_STATE(924)] = 73687, + [SMALL_STATE(925)] = 73750, + [SMALL_STATE(926)] = 73813, + [SMALL_STATE(927)] = 73878, + [SMALL_STATE(928)] = 73941, + [SMALL_STATE(929)] = 74006, + [SMALL_STATE(930)] = 74069, + [SMALL_STATE(931)] = 74132, + [SMALL_STATE(932)] = 74195, + [SMALL_STATE(933)] = 74258, + [SMALL_STATE(934)] = 74323, + [SMALL_STATE(935)] = 74386, + [SMALL_STATE(936)] = 74447, + [SMALL_STATE(937)] = 74510, + [SMALL_STATE(938)] = 74573, + [SMALL_STATE(939)] = 74624, + [SMALL_STATE(940)] = 74677, + [SMALL_STATE(941)] = 74734, + [SMALL_STATE(942)] = 74795, + [SMALL_STATE(943)] = 74855, + [SMALL_STATE(944)] = 74915, + [SMALL_STATE(945)] = 74975, + [SMALL_STATE(946)] = 75035, + [SMALL_STATE(947)] = 75095, + [SMALL_STATE(948)] = 75155, + [SMALL_STATE(949)] = 75215, + [SMALL_STATE(950)] = 75275, + [SMALL_STATE(951)] = 75335, + [SMALL_STATE(952)] = 75395, + [SMALL_STATE(953)] = 75455, + [SMALL_STATE(954)] = 75515, + [SMALL_STATE(955)] = 75575, + [SMALL_STATE(956)] = 75635, + [SMALL_STATE(957)] = 75695, + [SMALL_STATE(958)] = 75755, + [SMALL_STATE(959)] = 75815, + [SMALL_STATE(960)] = 75875, + [SMALL_STATE(961)] = 75935, + [SMALL_STATE(962)] = 75995, + [SMALL_STATE(963)] = 76055, + [SMALL_STATE(964)] = 76115, + [SMALL_STATE(965)] = 76175, + [SMALL_STATE(966)] = 76235, + [SMALL_STATE(967)] = 76295, + [SMALL_STATE(968)] = 76355, + [SMALL_STATE(969)] = 76415, + [SMALL_STATE(970)] = 76475, + [SMALL_STATE(971)] = 76535, + [SMALL_STATE(972)] = 76595, + [SMALL_STATE(973)] = 76655, + [SMALL_STATE(974)] = 76715, + [SMALL_STATE(975)] = 76775, + [SMALL_STATE(976)] = 76835, + [SMALL_STATE(977)] = 76895, + [SMALL_STATE(978)] = 76955, + [SMALL_STATE(979)] = 77015, + [SMALL_STATE(980)] = 77075, + [SMALL_STATE(981)] = 77135, + [SMALL_STATE(982)] = 77195, + [SMALL_STATE(983)] = 77255, + [SMALL_STATE(984)] = 77315, + [SMALL_STATE(985)] = 77375, + [SMALL_STATE(986)] = 77435, + [SMALL_STATE(987)] = 77495, + [SMALL_STATE(988)] = 77564, + [SMALL_STATE(989)] = 77624, + [SMALL_STATE(990)] = 77684, + [SMALL_STATE(991)] = 77726, + [SMALL_STATE(992)] = 77786, + [SMALL_STATE(993)] = 77846, + [SMALL_STATE(994)] = 77914, + [SMALL_STATE(995)] = 77974, + [SMALL_STATE(996)] = 78034, + [SMALL_STATE(997)] = 78098, + [SMALL_STATE(998)] = 78158, + [SMALL_STATE(999)] = 78218, + [SMALL_STATE(1000)] = 78278, + [SMALL_STATE(1001)] = 78338, + [SMALL_STATE(1002)] = 78398, + [SMALL_STATE(1003)] = 78458, + [SMALL_STATE(1004)] = 78526, + [SMALL_STATE(1005)] = 78586, + [SMALL_STATE(1006)] = 78651, + [SMALL_STATE(1007)] = 78712, + [SMALL_STATE(1008)] = 78777, + [SMALL_STATE(1009)] = 78842, + [SMALL_STATE(1010)] = 78907, + [SMALL_STATE(1011)] = 78972, + [SMALL_STATE(1012)] = 79037, + [SMALL_STATE(1013)] = 79102, + [SMALL_STATE(1014)] = 79155, + [SMALL_STATE(1015)] = 79220, + [SMALL_STATE(1016)] = 79277, + [SMALL_STATE(1017)] = 79332, + [SMALL_STATE(1018)] = 79367, + [SMALL_STATE(1019)] = 79416, + [SMALL_STATE(1020)] = 79463, + [SMALL_STATE(1021)] = 79520, + [SMALL_STATE(1022)] = 79577, + [SMALL_STATE(1023)] = 79640, + [SMALL_STATE(1024)] = 79681, + [SMALL_STATE(1025)] = 79746, + [SMALL_STATE(1026)] = 79811, + [SMALL_STATE(1027)] = 79876, + [SMALL_STATE(1028)] = 79941, + [SMALL_STATE(1029)] = 80002, + [SMALL_STATE(1030)] = 80063, + [SMALL_STATE(1031)] = 80124, + [SMALL_STATE(1032)] = 80189, + [SMALL_STATE(1033)] = 80254, + [SMALL_STATE(1034)] = 80319, + [SMALL_STATE(1035)] = 80382, + [SMALL_STATE(1036)] = 80447, + [SMALL_STATE(1037)] = 80509, + [SMALL_STATE(1038)] = 80571, + [SMALL_STATE(1039)] = 80633, + [SMALL_STATE(1040)] = 80695, + [SMALL_STATE(1041)] = 80757, + [SMALL_STATE(1042)] = 80819, + [SMALL_STATE(1043)] = 80881, + [SMALL_STATE(1044)] = 80943, + [SMALL_STATE(1045)] = 81005, + [SMALL_STATE(1046)] = 81067, + [SMALL_STATE(1047)] = 81129, + [SMALL_STATE(1048)] = 81185, + [SMALL_STATE(1049)] = 81245, + [SMALL_STATE(1050)] = 81307, + [SMALL_STATE(1051)] = 81369, + [SMALL_STATE(1052)] = 81417, + [SMALL_STATE(1053)] = 81479, + [SMALL_STATE(1054)] = 81541, + [SMALL_STATE(1055)] = 81603, + [SMALL_STATE(1056)] = 81659, + [SMALL_STATE(1057)] = 81721, + [SMALL_STATE(1058)] = 81773, + [SMALL_STATE(1059)] = 81833, + [SMALL_STATE(1060)] = 81895, + [SMALL_STATE(1061)] = 81955, + [SMALL_STATE(1062)] = 82017, + [SMALL_STATE(1063)] = 82079, + [SMALL_STATE(1064)] = 82141, + [SMALL_STATE(1065)] = 82203, + [SMALL_STATE(1066)] = 82265, + [SMALL_STATE(1067)] = 82325, + [SMALL_STATE(1068)] = 82387, + [SMALL_STATE(1069)] = 82449, + [SMALL_STATE(1070)] = 82511, + [SMALL_STATE(1071)] = 82565, + [SMALL_STATE(1072)] = 82627, + [SMALL_STATE(1073)] = 82689, + [SMALL_STATE(1074)] = 82751, + [SMALL_STATE(1075)] = 82813, + [SMALL_STATE(1076)] = 82869, + [SMALL_STATE(1077)] = 82915, + [SMALL_STATE(1078)] = 82977, + [SMALL_STATE(1079)] = 83036, + [SMALL_STATE(1080)] = 83083, + [SMALL_STATE(1081)] = 83130, + [SMALL_STATE(1082)] = 83177, + [SMALL_STATE(1083)] = 83222, + [SMALL_STATE(1084)] = 83269, + [SMALL_STATE(1085)] = 83316, + [SMALL_STATE(1086)] = 83363, + [SMALL_STATE(1087)] = 83410, + [SMALL_STATE(1088)] = 83457, + [SMALL_STATE(1089)] = 83504, + [SMALL_STATE(1090)] = 83551, + [SMALL_STATE(1091)] = 83598, + [SMALL_STATE(1092)] = 83645, + [SMALL_STATE(1093)] = 83690, + [SMALL_STATE(1094)] = 83737, + [SMALL_STATE(1095)] = 83784, + [SMALL_STATE(1096)] = 83831, + [SMALL_STATE(1097)] = 83875, + [SMALL_STATE(1098)] = 83919, + [SMALL_STATE(1099)] = 83963, + [SMALL_STATE(1100)] = 84007, + [SMALL_STATE(1101)] = 84051, + [SMALL_STATE(1102)] = 84095, + [SMALL_STATE(1103)] = 84136, + [SMALL_STATE(1104)] = 84177, + [SMALL_STATE(1105)] = 84218, + [SMALL_STATE(1106)] = 84259, + [SMALL_STATE(1107)] = 84300, + [SMALL_STATE(1108)] = 84341, + [SMALL_STATE(1109)] = 84382, + [SMALL_STATE(1110)] = 84423, + [SMALL_STATE(1111)] = 84464, + [SMALL_STATE(1112)] = 84505, + [SMALL_STATE(1113)] = 84546, + [SMALL_STATE(1114)] = 84587, + [SMALL_STATE(1115)] = 84628, + [SMALL_STATE(1116)] = 84669, + [SMALL_STATE(1117)] = 84710, + [SMALL_STATE(1118)] = 84751, + [SMALL_STATE(1119)] = 84792, + [SMALL_STATE(1120)] = 84833, + [SMALL_STATE(1121)] = 84874, + [SMALL_STATE(1122)] = 84915, + [SMALL_STATE(1123)] = 84956, + [SMALL_STATE(1124)] = 84997, + [SMALL_STATE(1125)] = 85038, + [SMALL_STATE(1126)] = 85079, + [SMALL_STATE(1127)] = 85120, + [SMALL_STATE(1128)] = 85161, + [SMALL_STATE(1129)] = 85202, + [SMALL_STATE(1130)] = 85243, + [SMALL_STATE(1131)] = 85284, + [SMALL_STATE(1132)] = 85325, + [SMALL_STATE(1133)] = 85366, + [SMALL_STATE(1134)] = 85407, + [SMALL_STATE(1135)] = 85448, + [SMALL_STATE(1136)] = 85489, + [SMALL_STATE(1137)] = 85530, + [SMALL_STATE(1138)] = 85571, + [SMALL_STATE(1139)] = 85612, + [SMALL_STATE(1140)] = 85653, + [SMALL_STATE(1141)] = 85694, + [SMALL_STATE(1142)] = 85735, + [SMALL_STATE(1143)] = 85776, + [SMALL_STATE(1144)] = 85817, + [SMALL_STATE(1145)] = 85858, + [SMALL_STATE(1146)] = 85899, + [SMALL_STATE(1147)] = 85940, + [SMALL_STATE(1148)] = 85981, + [SMALL_STATE(1149)] = 86005, + [SMALL_STATE(1150)] = 86036, + [SMALL_STATE(1151)] = 86059, + [SMALL_STATE(1152)] = 86082, + [SMALL_STATE(1153)] = 86105, + [SMALL_STATE(1154)] = 86124, + [SMALL_STATE(1155)] = 86143, + [SMALL_STATE(1156)] = 86162, + [SMALL_STATE(1157)] = 86181, + [SMALL_STATE(1158)] = 86200, + [SMALL_STATE(1159)] = 86219, + [SMALL_STATE(1160)] = 86238, + [SMALL_STATE(1161)] = 86257, + [SMALL_STATE(1162)] = 86276, + [SMALL_STATE(1163)] = 86295, + [SMALL_STATE(1164)] = 86314, + [SMALL_STATE(1165)] = 86335, + [SMALL_STATE(1166)] = 86354, + [SMALL_STATE(1167)] = 86373, + [SMALL_STATE(1168)] = 86397, + [SMALL_STATE(1169)] = 86416, + [SMALL_STATE(1170)] = 86434, + [SMALL_STATE(1171)] = 86452, + [SMALL_STATE(1172)] = 86470, + [SMALL_STATE(1173)] = 86488, + [SMALL_STATE(1174)] = 86506, + [SMALL_STATE(1175)] = 86526, + [SMALL_STATE(1176)] = 86542, + [SMALL_STATE(1177)] = 86560, + [SMALL_STATE(1178)] = 86578, + [SMALL_STATE(1179)] = 86595, + [SMALL_STATE(1180)] = 86612, + [SMALL_STATE(1181)] = 86629, + [SMALL_STATE(1182)] = 86646, + [SMALL_STATE(1183)] = 86663, + [SMALL_STATE(1184)] = 86680, + [SMALL_STATE(1185)] = 86697, + [SMALL_STATE(1186)] = 86714, + [SMALL_STATE(1187)] = 86731, + [SMALL_STATE(1188)] = 86748, + [SMALL_STATE(1189)] = 86765, + [SMALL_STATE(1190)] = 86782, + [SMALL_STATE(1191)] = 86799, + [SMALL_STATE(1192)] = 86816, + [SMALL_STATE(1193)] = 86833, + [SMALL_STATE(1194)] = 86850, + [SMALL_STATE(1195)] = 86867, + [SMALL_STATE(1196)] = 86884, + [SMALL_STATE(1197)] = 86901, + [SMALL_STATE(1198)] = 86918, + [SMALL_STATE(1199)] = 86935, + [SMALL_STATE(1200)] = 86952, + [SMALL_STATE(1201)] = 86969, + [SMALL_STATE(1202)] = 86986, + [SMALL_STATE(1203)] = 87003, + [SMALL_STATE(1204)] = 87020, + [SMALL_STATE(1205)] = 87037, + [SMALL_STATE(1206)] = 87054, + [SMALL_STATE(1207)] = 87071, + [SMALL_STATE(1208)] = 87088, + [SMALL_STATE(1209)] = 87105, + [SMALL_STATE(1210)] = 87122, + [SMALL_STATE(1211)] = 87139, + [SMALL_STATE(1212)] = 87156, + [SMALL_STATE(1213)] = 87173, + [SMALL_STATE(1214)] = 87190, + [SMALL_STATE(1215)] = 87207, + [SMALL_STATE(1216)] = 87224, + [SMALL_STATE(1217)] = 87241, + [SMALL_STATE(1218)] = 87258, + [SMALL_STATE(1219)] = 87275, + [SMALL_STATE(1220)] = 87292, + [SMALL_STATE(1221)] = 87309, + [SMALL_STATE(1222)] = 87326, + [SMALL_STATE(1223)] = 87343, + [SMALL_STATE(1224)] = 87354, + [SMALL_STATE(1225)] = 87371, + [SMALL_STATE(1226)] = 87388, + [SMALL_STATE(1227)] = 87405, + [SMALL_STATE(1228)] = 87422, + [SMALL_STATE(1229)] = 87437, + [SMALL_STATE(1230)] = 87454, + [SMALL_STATE(1231)] = 87471, + [SMALL_STATE(1232)] = 87488, + [SMALL_STATE(1233)] = 87501, + [SMALL_STATE(1234)] = 87518, + [SMALL_STATE(1235)] = 87535, + [SMALL_STATE(1236)] = 87552, + [SMALL_STATE(1237)] = 87569, + [SMALL_STATE(1238)] = 87586, + [SMALL_STATE(1239)] = 87603, + [SMALL_STATE(1240)] = 87620, + [SMALL_STATE(1241)] = 87631, + [SMALL_STATE(1242)] = 87648, + [SMALL_STATE(1243)] = 87665, + [SMALL_STATE(1244)] = 87682, + [SMALL_STATE(1245)] = 87699, + [SMALL_STATE(1246)] = 87716, + [SMALL_STATE(1247)] = 87731, + [SMALL_STATE(1248)] = 87746, + [SMALL_STATE(1249)] = 87763, + [SMALL_STATE(1250)] = 87780, + [SMALL_STATE(1251)] = 87795, + [SMALL_STATE(1252)] = 87812, + [SMALL_STATE(1253)] = 87829, + [SMALL_STATE(1254)] = 87846, + [SMALL_STATE(1255)] = 87863, + [SMALL_STATE(1256)] = 87880, + [SMALL_STATE(1257)] = 87897, + [SMALL_STATE(1258)] = 87914, + [SMALL_STATE(1259)] = 87931, + [SMALL_STATE(1260)] = 87948, + [SMALL_STATE(1261)] = 87965, + [SMALL_STATE(1262)] = 87982, + [SMALL_STATE(1263)] = 87999, + [SMALL_STATE(1264)] = 88016, + [SMALL_STATE(1265)] = 88033, + [SMALL_STATE(1266)] = 88050, + [SMALL_STATE(1267)] = 88067, + [SMALL_STATE(1268)] = 88082, + [SMALL_STATE(1269)] = 88099, + [SMALL_STATE(1270)] = 88116, + [SMALL_STATE(1271)] = 88133, + [SMALL_STATE(1272)] = 88148, + [SMALL_STATE(1273)] = 88165, + [SMALL_STATE(1274)] = 88182, + [SMALL_STATE(1275)] = 88199, + [SMALL_STATE(1276)] = 88216, + [SMALL_STATE(1277)] = 88233, + [SMALL_STATE(1278)] = 88250, + [SMALL_STATE(1279)] = 88267, + [SMALL_STATE(1280)] = 88284, + [SMALL_STATE(1281)] = 88301, + [SMALL_STATE(1282)] = 88316, + [SMALL_STATE(1283)] = 88333, + [SMALL_STATE(1284)] = 88350, + [SMALL_STATE(1285)] = 88367, + [SMALL_STATE(1286)] = 88384, + [SMALL_STATE(1287)] = 88401, + [SMALL_STATE(1288)] = 88418, + [SMALL_STATE(1289)] = 88435, + [SMALL_STATE(1290)] = 88452, + [SMALL_STATE(1291)] = 88466, + [SMALL_STATE(1292)] = 88480, + [SMALL_STATE(1293)] = 88494, + [SMALL_STATE(1294)] = 88508, + [SMALL_STATE(1295)] = 88522, + [SMALL_STATE(1296)] = 88536, + [SMALL_STATE(1297)] = 88550, + [SMALL_STATE(1298)] = 88564, + [SMALL_STATE(1299)] = 88578, + [SMALL_STATE(1300)] = 88592, + [SMALL_STATE(1301)] = 88606, + [SMALL_STATE(1302)] = 88620, + [SMALL_STATE(1303)] = 88634, + [SMALL_STATE(1304)] = 88648, + [SMALL_STATE(1305)] = 88662, + [SMALL_STATE(1306)] = 88676, + [SMALL_STATE(1307)] = 88690, + [SMALL_STATE(1308)] = 88704, + [SMALL_STATE(1309)] = 88718, + [SMALL_STATE(1310)] = 88732, + [SMALL_STATE(1311)] = 88746, + [SMALL_STATE(1312)] = 88760, + [SMALL_STATE(1313)] = 88774, + [SMALL_STATE(1314)] = 88788, + [SMALL_STATE(1315)] = 88802, + [SMALL_STATE(1316)] = 88816, + [SMALL_STATE(1317)] = 88830, + [SMALL_STATE(1318)] = 88844, + [SMALL_STATE(1319)] = 88858, + [SMALL_STATE(1320)] = 88872, + [SMALL_STATE(1321)] = 88884, + [SMALL_STATE(1322)] = 88898, + [SMALL_STATE(1323)] = 88912, + [SMALL_STATE(1324)] = 88926, + [SMALL_STATE(1325)] = 88940, + [SMALL_STATE(1326)] = 88952, + [SMALL_STATE(1327)] = 88966, + [SMALL_STATE(1328)] = 88980, + [SMALL_STATE(1329)] = 88994, + [SMALL_STATE(1330)] = 89008, + [SMALL_STATE(1331)] = 89022, + [SMALL_STATE(1332)] = 89036, + [SMALL_STATE(1333)] = 89050, + [SMALL_STATE(1334)] = 89064, + [SMALL_STATE(1335)] = 89078, + [SMALL_STATE(1336)] = 89092, + [SMALL_STATE(1337)] = 89106, + [SMALL_STATE(1338)] = 89120, + [SMALL_STATE(1339)] = 89134, + [SMALL_STATE(1340)] = 89148, + [SMALL_STATE(1341)] = 89162, + [SMALL_STATE(1342)] = 89176, + [SMALL_STATE(1343)] = 89190, + [SMALL_STATE(1344)] = 89202, + [SMALL_STATE(1345)] = 89216, + [SMALL_STATE(1346)] = 89230, + [SMALL_STATE(1347)] = 89244, + [SMALL_STATE(1348)] = 89258, + [SMALL_STATE(1349)] = 89270, + [SMALL_STATE(1350)] = 89284, + [SMALL_STATE(1351)] = 89298, + [SMALL_STATE(1352)] = 89312, + [SMALL_STATE(1353)] = 89326, + [SMALL_STATE(1354)] = 89338, + [SMALL_STATE(1355)] = 89352, + [SMALL_STATE(1356)] = 89366, + [SMALL_STATE(1357)] = 89380, + [SMALL_STATE(1358)] = 89394, + [SMALL_STATE(1359)] = 89408, + [SMALL_STATE(1360)] = 89422, + [SMALL_STATE(1361)] = 89436, + [SMALL_STATE(1362)] = 89450, + [SMALL_STATE(1363)] = 89462, + [SMALL_STATE(1364)] = 89474, + [SMALL_STATE(1365)] = 89488, + [SMALL_STATE(1366)] = 89499, + [SMALL_STATE(1367)] = 89510, + [SMALL_STATE(1368)] = 89521, + [SMALL_STATE(1369)] = 89532, + [SMALL_STATE(1370)] = 89541, + [SMALL_STATE(1371)] = 89552, + [SMALL_STATE(1372)] = 89563, + [SMALL_STATE(1373)] = 89574, + [SMALL_STATE(1374)] = 89585, + [SMALL_STATE(1375)] = 89596, + [SMALL_STATE(1376)] = 89607, + [SMALL_STATE(1377)] = 89618, + [SMALL_STATE(1378)] = 89627, + [SMALL_STATE(1379)] = 89636, + [SMALL_STATE(1380)] = 89647, + [SMALL_STATE(1381)] = 89658, + [SMALL_STATE(1382)] = 89667, + [SMALL_STATE(1383)] = 89678, + [SMALL_STATE(1384)] = 89689, + [SMALL_STATE(1385)] = 89698, + [SMALL_STATE(1386)] = 89709, + [SMALL_STATE(1387)] = 89718, + [SMALL_STATE(1388)] = 89729, + [SMALL_STATE(1389)] = 89740, + [SMALL_STATE(1390)] = 89749, + [SMALL_STATE(1391)] = 89760, + [SMALL_STATE(1392)] = 89769, + [SMALL_STATE(1393)] = 89780, + [SMALL_STATE(1394)] = 89791, + [SMALL_STATE(1395)] = 89802, + [SMALL_STATE(1396)] = 89811, + [SMALL_STATE(1397)] = 89822, + [SMALL_STATE(1398)] = 89833, + [SMALL_STATE(1399)] = 89844, + [SMALL_STATE(1400)] = 89855, + [SMALL_STATE(1401)] = 89866, + [SMALL_STATE(1402)] = 89877, + [SMALL_STATE(1403)] = 89886, + [SMALL_STATE(1404)] = 89897, + [SMALL_STATE(1405)] = 89908, + [SMALL_STATE(1406)] = 89919, + [SMALL_STATE(1407)] = 89928, + [SMALL_STATE(1408)] = 89937, + [SMALL_STATE(1409)] = 89948, + [SMALL_STATE(1410)] = 89959, + [SMALL_STATE(1411)] = 89970, + [SMALL_STATE(1412)] = 89979, + [SMALL_STATE(1413)] = 89990, + [SMALL_STATE(1414)] = 89999, + [SMALL_STATE(1415)] = 90010, + [SMALL_STATE(1416)] = 90021, + [SMALL_STATE(1417)] = 90029, + [SMALL_STATE(1418)] = 90037, + [SMALL_STATE(1419)] = 90045, + [SMALL_STATE(1420)] = 90053, + [SMALL_STATE(1421)] = 90061, + [SMALL_STATE(1422)] = 90069, + [SMALL_STATE(1423)] = 90077, + [SMALL_STATE(1424)] = 90085, + [SMALL_STATE(1425)] = 90093, + [SMALL_STATE(1426)] = 90101, + [SMALL_STATE(1427)] = 90109, + [SMALL_STATE(1428)] = 90117, + [SMALL_STATE(1429)] = 90125, + [SMALL_STATE(1430)] = 90133, + [SMALL_STATE(1431)] = 90141, + [SMALL_STATE(1432)] = 90149, + [SMALL_STATE(1433)] = 90157, + [SMALL_STATE(1434)] = 90165, + [SMALL_STATE(1435)] = 90173, + [SMALL_STATE(1436)] = 90181, + [SMALL_STATE(1437)] = 90189, + [SMALL_STATE(1438)] = 90197, + [SMALL_STATE(1439)] = 90205, + [SMALL_STATE(1440)] = 90213, + [SMALL_STATE(1441)] = 90221, + [SMALL_STATE(1442)] = 90229, + [SMALL_STATE(1443)] = 90237, + [SMALL_STATE(1444)] = 90245, + [SMALL_STATE(1445)] = 90253, + [SMALL_STATE(1446)] = 90261, + [SMALL_STATE(1447)] = 90269, + [SMALL_STATE(1448)] = 90277, + [SMALL_STATE(1449)] = 90285, + [SMALL_STATE(1450)] = 90293, + [SMALL_STATE(1451)] = 90301, + [SMALL_STATE(1452)] = 90309, + [SMALL_STATE(1453)] = 90317, + [SMALL_STATE(1454)] = 90325, + [SMALL_STATE(1455)] = 90333, + [SMALL_STATE(1456)] = 90341, + [SMALL_STATE(1457)] = 90349, + [SMALL_STATE(1458)] = 90357, + [SMALL_STATE(1459)] = 90365, + [SMALL_STATE(1460)] = 90373, + [SMALL_STATE(1461)] = 90381, + [SMALL_STATE(1462)] = 90389, + [SMALL_STATE(1463)] = 90397, + [SMALL_STATE(1464)] = 90405, + [SMALL_STATE(1465)] = 90413, + [SMALL_STATE(1466)] = 90421, + [SMALL_STATE(1467)] = 90429, + [SMALL_STATE(1468)] = 90437, + [SMALL_STATE(1469)] = 90445, + [SMALL_STATE(1470)] = 90453, + [SMALL_STATE(1471)] = 90461, + [SMALL_STATE(1472)] = 90469, + [SMALL_STATE(1473)] = 90477, + [SMALL_STATE(1474)] = 90485, + [SMALL_STATE(1475)] = 90493, + [SMALL_STATE(1476)] = 90501, + [SMALL_STATE(1477)] = 90509, + [SMALL_STATE(1478)] = 90517, + [SMALL_STATE(1479)] = 90525, + [SMALL_STATE(1480)] = 90533, + [SMALL_STATE(1481)] = 90541, + [SMALL_STATE(1482)] = 90549, + [SMALL_STATE(1483)] = 90557, + [SMALL_STATE(1484)] = 90565, + [SMALL_STATE(1485)] = 90573, + [SMALL_STATE(1486)] = 90581, + [SMALL_STATE(1487)] = 90589, + [SMALL_STATE(1488)] = 90597, + [SMALL_STATE(1489)] = 90605, + [SMALL_STATE(1490)] = 90613, + [SMALL_STATE(1491)] = 90621, + [SMALL_STATE(1492)] = 90629, + [SMALL_STATE(1493)] = 90637, + [SMALL_STATE(1494)] = 90645, + [SMALL_STATE(1495)] = 90653, + [SMALL_STATE(1496)] = 90661, + [SMALL_STATE(1497)] = 90669, + [SMALL_STATE(1498)] = 90677, + [SMALL_STATE(1499)] = 90685, + [SMALL_STATE(1500)] = 90693, + [SMALL_STATE(1501)] = 90701, + [SMALL_STATE(1502)] = 90709, + [SMALL_STATE(1503)] = 90717, + [SMALL_STATE(1504)] = 90725, + [SMALL_STATE(1505)] = 90733, + [SMALL_STATE(1506)] = 90741, + [SMALL_STATE(1507)] = 90749, + [SMALL_STATE(1508)] = 90757, + [SMALL_STATE(1509)] = 90765, + [SMALL_STATE(1510)] = 90773, + [SMALL_STATE(1511)] = 90781, + [SMALL_STATE(1512)] = 90789, + [SMALL_STATE(1513)] = 90797, + [SMALL_STATE(1514)] = 90805, + [SMALL_STATE(1515)] = 90813, + [SMALL_STATE(1516)] = 90821, + [SMALL_STATE(1517)] = 90829, + [SMALL_STATE(1518)] = 90837, + [SMALL_STATE(1519)] = 90845, + [SMALL_STATE(1520)] = 90853, + [SMALL_STATE(1521)] = 90861, + [SMALL_STATE(1522)] = 90869, + [SMALL_STATE(1523)] = 90877, + [SMALL_STATE(1524)] = 90885, + [SMALL_STATE(1525)] = 90893, + [SMALL_STATE(1526)] = 90901, + [SMALL_STATE(1527)] = 90909, + [SMALL_STATE(1528)] = 90917, + [SMALL_STATE(1529)] = 90925, + [SMALL_STATE(1530)] = 90933, + [SMALL_STATE(1531)] = 90941, + [SMALL_STATE(1532)] = 90949, + [SMALL_STATE(1533)] = 90957, + [SMALL_STATE(1534)] = 90965, + [SMALL_STATE(1535)] = 90973, + [SMALL_STATE(1536)] = 90981, + [SMALL_STATE(1537)] = 90989, + [SMALL_STATE(1538)] = 90997, + [SMALL_STATE(1539)] = 91005, + [SMALL_STATE(1540)] = 91013, + [SMALL_STATE(1541)] = 91021, + [SMALL_STATE(1542)] = 91029, + [SMALL_STATE(1543)] = 91037, + [SMALL_STATE(1544)] = 91045, + [SMALL_STATE(1545)] = 91053, + [SMALL_STATE(1546)] = 91061, + [SMALL_STATE(1547)] = 91069, + [SMALL_STATE(1548)] = 91077, + [SMALL_STATE(1549)] = 91085, + [SMALL_STATE(1550)] = 91093, + [SMALL_STATE(1551)] = 91101, + [SMALL_STATE(1552)] = 91109, + [SMALL_STATE(1553)] = 91117, + [SMALL_STATE(1554)] = 91125, + [SMALL_STATE(1555)] = 91133, + [SMALL_STATE(1556)] = 91141, + [SMALL_STATE(1557)] = 91149, + [SMALL_STATE(1558)] = 91157, + [SMALL_STATE(1559)] = 91165, + [SMALL_STATE(1560)] = 91173, + [SMALL_STATE(1561)] = 91181, + [SMALL_STATE(1562)] = 91189, + [SMALL_STATE(1563)] = 91197, + [SMALL_STATE(1564)] = 91205, + [SMALL_STATE(1565)] = 91213, + [SMALL_STATE(1566)] = 91221, + [SMALL_STATE(1567)] = 91229, + [SMALL_STATE(1568)] = 91237, + [SMALL_STATE(1569)] = 91245, + [SMALL_STATE(1570)] = 91253, + [SMALL_STATE(1571)] = 91261, + [SMALL_STATE(1572)] = 91269, + [SMALL_STATE(1573)] = 91277, + [SMALL_STATE(1574)] = 91285, + [SMALL_STATE(1575)] = 91293, + [SMALL_STATE(1576)] = 91301, + [SMALL_STATE(1577)] = 91309, + [SMALL_STATE(1578)] = 91317, + [SMALL_STATE(1579)] = 91325, + [SMALL_STATE(1580)] = 91333, + [SMALL_STATE(1581)] = 91341, + [SMALL_STATE(1582)] = 91349, + [SMALL_STATE(1583)] = 91357, + [SMALL_STATE(1584)] = 91365, + [SMALL_STATE(1585)] = 91373, +}; + +static const TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(902), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(893), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1170), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(848), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1583), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1582), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1581), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1574), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(949), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(948), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1411), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1572), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1571), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1570), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(878), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(306), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1408), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(300), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(299), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1405), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(297), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(977), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1404), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(473), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [77] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_return, 1), + [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_return, 1), + [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(472), + [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), + [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), + [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1524), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(478), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1548), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(475), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1371), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(198), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(172), + [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1379), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(197), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(966), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1376), + [115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_break, 1), + [117] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_break, 1), + [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1549), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), + [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(7), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1531), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(184), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1536), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(8), + [139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), + [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1541), + [145] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [151] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1503), + [153] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [155] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(355), + [159] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), + [161] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1550), + [163] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [165] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [167] = {.entry = {.count = 1, .reusable = false}}, SHIFT(263), + [169] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1547), + [171] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [173] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(375), + [177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1544), + [179] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [181] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [183] = {.entry = {.count = 1, .reusable = false}}, SHIFT(264), + [185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1546), + [187] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [189] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [191] = {.entry = {.count = 1, .reusable = false}}, SHIFT(343), + [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1545), + [195] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [197] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(395), + [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1543), + [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [207] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__stmts, 2), + [211] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(902), + [214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1498), + [217] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(44), + [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(893), + [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(893), + [226] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1170), + [229] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1584), + [232] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(848), + [235] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(72), + [238] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1583), + [241] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(60), + [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(28), + [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1582), + [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1581), + [253] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1574), + [256] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(949), + [259] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(948), + [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1411), + [265] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1572), + [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1571), + [271] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1570), + [274] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(27), + [277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(26), + [280] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(878), + [283] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(306), + [286] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(952), + [289] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1408), + [292] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(300), + [295] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(299), + [298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1405), + [301] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(297), + [304] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(977), + [307] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__stmts, 2), SHIFT_REPEAT(1404), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1362), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1343), + [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 1), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1017), + [346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1518), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [350] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(185), + [354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(953), + [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1475), + [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), + [364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(972), + [366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(890), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(881), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(470), + [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expr_fields, 2), + [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expr_fields, 3), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864), + [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_query, 2), + [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_query, 2), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), + [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__query_stmts, 2), + [392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(978), + [395] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(399), + [398] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(955), + [401] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(401), + [404] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(81), + [407] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(80), + [410] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(92), + [413] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(97), + [416] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(90), + [419] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(954), + [422] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(397), + [425] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(89), + [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(506), + [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(871), + [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), + [434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(467), + [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__exprs, 3), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(507), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), + [448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__exprs, 2), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), + [452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_query, 1), + [454] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_query, 1), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849), + [460] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(944), + [463] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(304), + [466] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(962), + [469] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(77), + [472] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(129), + [475] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(130), + [478] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(394), + [481] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(947), + [484] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(293), + [487] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(88), + [490] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(970), + [493] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(83), + [496] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(942), + [499] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(82), + [502] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(235), + [505] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(233), + [508] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(230), + [511] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(957), + [514] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(144), + [517] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(145), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [524] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(944), + [528] = {.entry = {.count = 1, .reusable = false}}, SHIFT(978), + [530] = {.entry = {.count = 1, .reusable = false}}, SHIFT(970), + [532] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968), + [534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(975), + [536] = {.entry = {.count = 1, .reusable = false}}, SHIFT(969), + [538] = {.entry = {.count = 1, .reusable = false}}, SHIFT(981), + [540] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(969), + [543] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(200), + [546] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(986), + [549] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(203), + [552] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(109), + [555] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(110), + [558] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(79), + [561] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(78), + [564] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(301), + [567] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(980), + [570] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(205), + [573] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(243), + [576] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(951), + [579] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(76), + [582] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(963), + [585] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(265), + [588] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(220), + [591] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(219), + [594] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(104), + [597] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(960), + [600] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(266), + [603] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(268), + [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(964), + [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(952), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), + [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(945), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [632] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(952), + [635] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(106), + [638] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(959), + [641] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(108), + [644] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(111), + [647] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(112), + [650] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(113), + [653] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(945), + [656] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(115), + [659] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(116), + [662] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(981), + [665] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(232), + [668] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(950), + [671] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(229), + [674] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(131), + [677] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(147), + [680] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(393), + [683] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(971), + [686] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(228), + [689] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(117), + [692] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(975), + [695] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(335), + [698] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(946), + [701] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(333), + [704] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(204), + [707] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(254), + [710] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(87), + [713] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(983), + [716] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(330), + [719] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(105), + [722] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(968), + [725] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(163), + [728] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(982), + [731] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(162), + [734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(214), + [737] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(213), + [740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(84), + [743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(984), + [746] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(132), + [749] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(128), + [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(953), + [754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(974), + [758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), + [772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [776] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(953), + [779] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(332), + [782] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(974), + [785] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(357), + [788] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(250), + [791] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(249), + [794] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(244), + [797] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(965), + [800] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(342), + [803] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(340), + [806] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(964), + [809] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(387), + [812] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(976), + [815] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(388), + [818] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(358), + [821] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(376), + [824] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(253), + [827] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(961), + [830] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(389), + [833] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(224), + [836] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(972), + [839] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(292), + [842] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(967), + [845] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(290), + [848] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(289), + [851] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(288), + [854] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(287), + [857] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(985), + [860] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(286), + [863] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(285), + [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(967), + [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(985), + [882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [886] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_nominal, 3), + [888] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_nominal, 3), + [890] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_compute, 2), + [892] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1111), + [894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [898] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_compute, 2), + [900] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [906] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), + [908] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), + [912] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119), + [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553), + [916] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1374), + [918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_record_concat, 3), + [920] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_record_concat, 3), + [922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_name, 1), + [924] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_name, 1), + [926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_nominal, 1), + [928] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_nominal, 1), + [930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_group, 4), + [932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_group, 4), + [934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_over, 4), + [936] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_over, 4), + [938] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_tuple, 4), + [940] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_tuple, 4), + [942] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_if, 3), + [944] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_if, 3), + [946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1372), + [948] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_nominal, 4), + [950] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_nominal, 4), + [952] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_compute, 3), + [954] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_compute, 3), + [956] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_group, 5), + [958] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_group, 5), + [960] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_annot, 3), + [962] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_annot, 3), + [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1124), + [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_array, 3), + [968] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_array, 3), + [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_paren, 3), + [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_paren, 3), + [974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), + [976] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_roll, 2), + [980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_roll, 2), + [982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_wild, 1), + [984] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_wild, 1), + [986] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_over, 5), + [988] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_over, 5), + [990] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_tuple, 5), + [992] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_tuple, 5), + [994] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_fun, 5), + [996] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_fun, 5), + [998] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_record, 3), + [1000] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_record, 3), + [1002] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_group, 6), + [1004] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_group, 6), + [1006] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_unit, 2), + [1008] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_unit, 2), + [1010] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_fun, 6), + [1012] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_fun, 6), + [1014] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_array, 2), + [1016] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type_array, 2), + [1018] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 4), + [1020] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 4), + [1022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 3), + [1024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 3), + [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_roll, 3), + [1028] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_roll, 3), + [1030] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), + [1032] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), + [1034] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [1036] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [1038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [1040] = {.entry = {.count = 1, .reusable = false}}, SHIFT(179), + [1042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [1044] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [1046] = {.entry = {.count = 1, .reusable = false}}, SHIFT(177), + [1048] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [1050] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_if, 5), + [1052] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_if, 5), + [1054] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_do, 2), + [1056] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_do, 2), + [1058] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_array, 2), + [1060] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_array, 2), + [1062] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_unit, 2), + [1064] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant_unit, 2), + [1066] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_string, 2), + [1068] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant_string, 2), + [1070] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_record, 2), + [1072] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_record, 2), + [1074] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_match, 5), + [1076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_match, 5), + [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_constant, 1), + [1080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_constant, 1), + [1082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [1084] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_name, 1), + [1086] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_name, 1), + [1088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_method_call, 10, .production_id = 7), + [1090] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_method_call, 10, .production_id = 7), + [1092] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_continue, 1), + [1094] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_continue, 1), + [1096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_order, 3), + [1098] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_order, 3), + [1100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_select, 3), + [1102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_select, 3), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_bool, 1), + [1106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant_bool, 1), + [1108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_method_call, 9, .production_id = 7), + [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_method_call, 9, .production_id = 7), + [1112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_call, 8, .production_id = 2), + [1114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_call, 8, .production_id = 2), + [1116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_try, 8), + [1118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_try, 8), + [1120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_call, 7, .production_id = 2), + [1122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_call, 7, .production_id = 2), + [1124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_try, 7), + [1126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_try, 7), + [1128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_fun, 7), + [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_fun, 7), + [1132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_record_variant, 3), + [1134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_record_variant, 3), + [1136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_loop, 2), + [1138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_loop, 2), + [1140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_record, 3), + [1142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_record, 3), + [1144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_string, 3), + [1146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant_string, 3), + [1148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_char, 3), + [1150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant_char, 3), + [1152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_paren, 3), + [1154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_paren, 3), + [1156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_array, 3), + [1158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_array, 3), + [1160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_method_call, 6, .production_id = 7), + [1162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_method_call, 6, .production_id = 7), + [1164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_while, 3), + [1166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_while, 3), + [1168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_group, 7), + [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_group, 7), + [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_method_call, 5, .production_id = 7), + [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_method_call, 5, .production_id = 7), + [1176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_call, 3, .production_id = 2), + [1178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_call, 3, .production_id = 2), + [1180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_binary, 3), + [1182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_binary, 3), + [1184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_record_access, 3), + [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_record_access, 3), + [1188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [1190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556), + [1192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_tuple_access, 3), + [1194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_tuple_access, 3), + [1196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_record_variant, 4), + [1198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_record_variant, 4), + [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_tuple, 4), + [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_tuple, 4), + [1204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_call, 4, .production_id = 2), + [1206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_call, 4, .production_id = 2), + [1208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_compute, 4), + [1210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_compute, 4), + [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_roll, 4), + [1214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_roll, 4), + [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_array_access, 4), + [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_array_access, 4), + [1220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__as, 2), + [1222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__as, 2), + [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_tuple, 5), + [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_tuple, 5), + [1228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_over, 6), + [1230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_over, 6), + [1232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_select, 2), + [1234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_select, 2), + [1236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_for, 5), + [1238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_for, 5), + [1240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_fun, 5), + [1242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_fun, 5), + [1244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_union, 2), + [1246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [1248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [1250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(123), + [1252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [1254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__of, 2), + [1256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_order, 2), + [1258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_order, 2), + [1260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_where, 2), + [1262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(188), + [1264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [1266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [1268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191), + [1270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [1272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(192), + [1274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(193), + [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_fun, 8), + [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_fun, 8), + [1280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_fun, 6), + [1282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_fun, 6), + [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_throw, 2), + [1286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_throw, 2), + [1288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [1290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_break, 2), + [1292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_break, 2), + [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_return, 2), + [1296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expr_return, 2), + [1298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_join, 6), + [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_val, 4), + [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_query_val, 4), + [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_from, 4), + [1306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_query_into, 2), + [1308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [1310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [1312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(189), + [1314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [1316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [1318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [1320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), + [1322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [1324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [1326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [1328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [1330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [1332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [1334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [1336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [1338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [1340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(138), + [1342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [1344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(137), + [1346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), + [1348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [1350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [1352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [1354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [1356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [1358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), + [1360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [1362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [1364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(159), + [1366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [1368] = {.entry = {.count = 1, .reusable = false}}, SHIFT(351), + [1370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(350), + [1372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [1374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(349), + [1376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [1378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [1380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [1382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(347), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347), + [1386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(346), + [1388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(345), + [1390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(252), + [1392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [1394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [1396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [1398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(247), + [1400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [1402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [1404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), + [1406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(273), + [1408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [1410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [1412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [1414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(296), + [1416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [1418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(298), + [1420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(303), + [1422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(372), + [1424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [1426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), + [1428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(354), + [1430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [1432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(353), + [1434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(352), + [1436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), + [1438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [1440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(257), + [1442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [1444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(309), + [1446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [1448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [1450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(255), + [1452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [1454] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), + [1456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(238), + [1458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(359), + [1460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [1462] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), + [1464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [1466] = {.entry = {.count = 1, .reusable = false}}, SHIFT(269), + [1468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [1470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(374), + [1472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [1474] = {.entry = {.count = 1, .reusable = false}}, SHIFT(344), + [1476] = {.entry = {.count = 1, .reusable = false}}, SHIFT(360), + [1478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), + [1480] = {.entry = {.count = 1, .reusable = false}}, SHIFT(362), + [1482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [1484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [1486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), + [1488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(370), + [1490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [1492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(373), + [1494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(378), + [1496] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), + [1498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383), + [1500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(262), + [1502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [1504] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), + [1506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [1508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [1510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(319), + [1512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [1514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(318), + [1516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), + [1518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(322), + [1520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [1522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(324), + [1524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [1526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 5, .production_id = 5), + [1528] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 5, .production_id = 5), + [1530] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 8, .production_id = 13), + [1532] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 8, .production_id = 13), + [1534] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 5, .production_id = 6), + [1536] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 5, .production_id = 6), + [1538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 7, .production_id = 11), + [1540] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 7, .production_id = 11), + [1542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 7, .production_id = 11), + [1544] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 7, .production_id = 11), + [1546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 9, .production_id = 15), + [1548] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 9, .production_id = 15), + [1550] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 8, .production_id = 14), + [1552] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 8, .production_id = 14), + [1554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 9, .production_id = 15), + [1556] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 9, .production_id = 15), + [1558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 8, .production_id = 13), + [1560] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 8, .production_id = 13), + [1562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_val, 5), + [1564] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_val, 5), + [1566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 7, .production_id = 11), + [1568] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 7, .production_id = 11), + [1570] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 9, .production_id = 16), + [1572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 9, .production_id = 16), + [1574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_var, 5), + [1576] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_var, 5), + [1578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_mod, 5), + [1580] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_mod, 5), + [1582] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 6, .production_id = 8), + [1584] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 6, .production_id = 8), + [1586] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_code, 3, .production_id = 1), + [1588] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_code, 3, .production_id = 1), + [1590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_use, 3), + [1592] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_use, 3), + [1594] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_expr, 2), + [1596] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_expr, 2), + [1598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 9, .production_id = 16), + [1600] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 9, .production_id = 16), + [1602] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 9, .production_id = 16), + [1604] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 9, .production_id = 16), + [1606] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 8, .production_id = 13), + [1608] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 8, .production_id = 13), + [1610] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 9, .production_id = 16), + [1612] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 9, .production_id = 16), + [1614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 10, .production_id = 17), + [1616] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 10, .production_id = 17), + [1618] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 10, .production_id = 17), + [1620] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 10, .production_id = 17), + [1622] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 10, .production_id = 18), + [1624] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 10, .production_id = 18), + [1626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 7, .production_id = 11), + [1628] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 7, .production_id = 11), + [1630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 10, .production_id = 18), + [1632] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 10, .production_id = 18), + [1634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 7, .production_id = 12), + [1636] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 7, .production_id = 12), + [1638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 11, .production_id = 19), + [1640] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 11, .production_id = 19), + [1642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 11, .production_id = 20), + [1644] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 11, .production_id = 20), + [1646] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 4, .production_id = 3), + [1648] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 4, .production_id = 3), + [1650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 11, .production_id = 20), + [1652] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 11, .production_id = 20), + [1654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 12, .production_id = 21), + [1656] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 12, .production_id = 21), + [1658] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 5, .production_id = 5), + [1660] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 5, .production_id = 5), + [1662] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 8, .production_id = 14), + [1664] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 8, .production_id = 14), + [1666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 6, .production_id = 8), + [1668] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 6, .production_id = 8), + [1670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 8, .production_id = 13), + [1672] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 8, .production_id = 13), + [1674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 6, .production_id = 10), + [1676] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 6, .production_id = 10), + [1678] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 6, .production_id = 10), + [1680] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 6, .production_id = 10), + [1682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 6, .production_id = 10), + [1684] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 6, .production_id = 10), + [1686] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 14, .production_id = 25), + [1688] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 14, .production_id = 25), + [1690] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 13, .production_id = 24), + [1692] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 13, .production_id = 24), + [1694] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 5, .production_id = 6), + [1696] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 5, .production_id = 6), + [1698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 8, .production_id = 14), + [1700] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 8, .production_id = 14), + [1702] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_mod, 4), + [1704] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_mod, 4), + [1706] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_code, 4, .production_id = 4), + [1708] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_code, 4, .production_id = 4), + [1710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 8, .production_id = 14), + [1712] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 8, .production_id = 14), + [1714] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 12, .production_id = 22), + [1716] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 12, .production_id = 22), + [1718] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_type, 5, .production_id = 5), + [1720] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_type, 5, .production_id = 5), + [1722] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_def, 13, .production_id = 23), + [1724] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_def, 13, .production_id = 23), + [1726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_enum, 7, .production_id = 12), + [1728] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_enum, 7, .production_id = 12), + [1730] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmt_struct, 4, .production_id = 3), + [1732] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_stmt_struct, 4, .production_id = 3), + [1734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1112), + [1736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1410), + [1738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1152), + [1740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1203), + [1742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1162), + [1744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1162), + [1746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(919), + [1748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540), + [1750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912), + [1752] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1161), + [1754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1453), + [1756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1456), + [1758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1127), + [1760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [1762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [1764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513), + [1766] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1393), + [1768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [1770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), + [1772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1532), + [1774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), + [1776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1502), + [1778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1573), + [1780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1429), + [1782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__arms, 3), + [1784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [1786] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2), + [1788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), + [1790] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__params, 2), + [1792] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__params, 3), + [1794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3), + [1796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1159), + [1798] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__arms, 2), + [1800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1163), + [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [1804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), + [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [1808] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [1810] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [1814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), + [1816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [1820] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__exprs, 1), + [1822] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), + [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [1826] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(210), + [1829] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(208), + [1832] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(217), + [1835] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(979), + [1838] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__query_stmts, 2), SHIFT_REPEAT(216), + [1841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(523), + [1843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [1845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [1847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [1849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(979), + [1851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [1853] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_field_expr, 1), + [1855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), + [1857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [1859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [1863] = {.entry = {.count = 1, .reusable = false}}, SHIFT(186), + [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [1869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201), + [1871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [1875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(218), + [1877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [1879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), + [1881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [1883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(489), + [1885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(440), + [1887] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__exprs_repeat1, 2), + [1889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [1891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(517), + [1893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), + [1895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), + [1897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1002), + [1899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454), + [1901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), + [1903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), + [1907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [1909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(361), + [1911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363), + [1913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [1915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(364), + [1917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [1919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [1921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(368), + [1923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [1925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(371), + [1927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380), + [1929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), + [1933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [1935] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_field_expr, 3), + [1937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_field_name, 3), + [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [1941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458), + [1943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1363), + [1945] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arm, 3, .production_id = 9), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), + [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(879), + [1953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), + [1955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [1957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(516), + [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(832), + [1961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), + [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(997), + [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), + [1979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [1981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(908), + [1987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), + [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), + [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(906), + [1997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [1999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), + [2001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), + [2003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [2005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [2007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [2009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1380), + [2011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(836), + [2013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), + [2017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1086), + [2021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1480), + [2023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), + [2025] = {.entry = {.count = 1, .reusable = false}}, SHIFT(851), + [2027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1533), + [2029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [2031] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__types, 2), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1232), + [2035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(794), + [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), + [2039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), + [2041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), + [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1386), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1476), + [2053] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__types, 3), + [2055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), + [2057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), + [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), + [2061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), + [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293), + [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [2067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), + [2069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1186), + [2071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1249), + [2073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1264), + [2075] = {.entry = {.count = 1, .reusable = false}}, SHIFT(432), + [2077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1323), + [2079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), + [2081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1081), + [2083] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1420), + [2085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), + [2087] = {.entry = {.count = 1, .reusable = false}}, SHIFT(446), + [2089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1287), + [2091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1230), + [2093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), + [2095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), + [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1251), + [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [2101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1470), + [2103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1200), + [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1273), + [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1227), + [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1272), + [2113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257), + [2115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175), + [2117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(859), + [2119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1164), + [2121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1215), + [2123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1196), + [2125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(431), + [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), + [2129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1367), + [2131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [2133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1244), + [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1283), + [2137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1252), + [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1190), + [2141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1412), + [2143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1385), + [2145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1401), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1151), + [2149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1320), + [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1268), + [2153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1188), + [2155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1219), + [2157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1270), + [2159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [2161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259), + [2163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1284), + [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1392), + [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), + [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1150), + [2171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), + [2173] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1407), + [2175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1407), + [2177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), + [2179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1431), + [2181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1138), + [2183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant_name, 1), + [2185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_name, 1), + [2187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_name, 1), + [2189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_tuple, 5), + [2191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_tuple, 5), + [2193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_tuple, 4), + [2195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_tuple, 4), + [2197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_record, 3), + [2199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_record, 3), + [2201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_record_concat, 3), + [2203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_record_concat, 3), + [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_paren, 3), + [2207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_paren, 3), + [2209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_or, 3), + [2211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_or, 3), + [2213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_variant, 3), + [2215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_variant, 3), + [2217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_array, 3), + [2219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_array, 3), + [2221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_wild, 1), + [2223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_wild, 1), + [2225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_constant, 1), + [2227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_constant, 1), + [2229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_array, 2), + [2231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_array, 2), + [2233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_annot, 3), + [2235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_annot, 3), + [2237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_record, 2), + [2239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_record, 2), + [2241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_variant, 4), + [2243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_variant, 4), + [2245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(903), + [2247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1121), + [2249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1), + [2251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), + [2253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [2255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2), + [2257] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), + [2261] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1173), + [2263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1309), + [2265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(847), + [2267] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1171), + [2269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), + [2271] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [2273] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1169), + [2275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_constant_string_repeat1, 2), + [2277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_constant_string_repeat1, 2), SHIFT_REPEAT(1173), + [2280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_constant_string_repeat1, 2), SHIFT_REPEAT(1309), + [2283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904), + [2285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1157), + [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__param, 3), + [2289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_field, 3), + [2291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1082), + [2293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__types, 1), + [2295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1377), + [2297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1441), + [2299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), + [2301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [2303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1141), + [2305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [2307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1102), + [2309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [2311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [2313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [2315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [2317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [2319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [2321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515), + [2323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), + [2325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [2327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1139), + [2329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [2331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), + [2333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), + [2335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1223), + [2337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [2339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), + [2341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [2343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), + [2345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [2347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [2349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [2351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [2353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1123), + [2355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [2357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [2359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1114), + [2365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [2367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1353), + [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165), + [2373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), + [2375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1122), + [2377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [2379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [2381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), + [2383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [2385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [2387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [2389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), + [2391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1355), + [2393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [2395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), + [2397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [2399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), + [2401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1146), + [2403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [2405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [2407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [2409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), + [2411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [2413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1140), + [2415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [2417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [2419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_meta, 3), + [2421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [2423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [2425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), + [2427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [2429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [2431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446), + [2433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [2435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [2437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1439), + [2439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__types_repeat1, 2), + [2441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [2443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [2445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1116), + [2447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [2449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [2451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [2453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [2457] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_meta, 4), + [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [2461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [2463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [2465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [2467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1128), + [2469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [2471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__exprs_repeat1, 2), SHIFT_REPEAT(331), + [2474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1266), + [2476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 1), + [2478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), + [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [2482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [2484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(909), + [2486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [2490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [2492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), + [2494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1464), + [2496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [2498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [2500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1370), + [2504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), + [2506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [2508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(339), + [2510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1104), + [2512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [2514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1092), + [2516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [2518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [2520] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2), SHIFT_REPEAT(956), + [2523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [2525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [2527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(400), + [2529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(391), + [2531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [2533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [2535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1109), + [2537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), + [2539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1398), + [2541] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__types_repeat1, 2), SHIFT_REPEAT(1113), + [2544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [2546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), + [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [2552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [2554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [2558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__pattern_fields_repeat1, 2), + [2560] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__pattern_fields_repeat1, 2), SHIFT_REPEAT(1365), + [2563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__type_fields_repeat1, 2), + [2565] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__type_fields_repeat1, 2), SHIFT_REPEAT(1415), + [2568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1247), + [2570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [2572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1085), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), + [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), + [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [2580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), + [2582] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__arms, 1), + [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(911), + [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806), + [2588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1319), + [2590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_code_repeat1, 2), + [2592] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_code_repeat1, 2), SHIFT_REPEAT(1301), + [2595] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__pattern_fields, 2), + [2597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), + [2599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), + [2601] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__attributes, 3), + [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1299), + [2607] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expr_fields, 1), + [2609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1348), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [2615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), + [2617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1303), + [2619] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__attributes_repeat1, 2), + [2621] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__attributes_repeat1, 2), SHIFT_REPEAT(1373), + [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(907), + [2626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__generics, 2), + [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1231), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1280), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1341), + [2636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__arms_repeat1, 2), + [2638] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__arms_repeat1, 2), SHIFT_REPEAT(920), + [2641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [2643] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_field, 3), + [2645] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_fields, 1), + [2647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1335), + [2649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [2651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1326), + [2653] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 1), + [2655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1149), + [2657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), + [2659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1119), + [2661] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_fields, 3), + [2663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1334), + [2665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [2667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296), + [2669] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_stmt_enum_repeat1, 2), + [2671] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_stmt_enum_repeat1, 2), SHIFT_REPEAT(1414), + [2674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_fields, 2), + [2676] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__attributes, 1), + [2678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1358), + [2680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1328), + [2682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1297), + [2686] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__generics_repeat1, 2), SHIFT_REPEAT(1409), + [2689] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__generics_repeat1, 2), + [2691] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__generics, 3), + [2693] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__pattern_fields, 3), + [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315), + [2699] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__generics, 1), + [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), + [2703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_interpolation, 2), + [2705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_interpolation, 2), + [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), + [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1094), + [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), + [2713] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__params_repeat1, 2), SHIFT_REPEAT(932), + [2716] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__params_repeat1, 2), + [2718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(901), + [2720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_field, 1), + [2722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(958), + [2724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__pattern_fields, 1), + [2726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1308), + [2728] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_code, 1), + [2730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1301), + [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), + [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), + [2736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1261), + [2738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__attributes, 2), + [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1312), + [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [2746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__expr_fields_repeat1, 2), + [2748] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__expr_fields_repeat1, 2), SHIFT_REPEAT(50), + [2751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(905), + [2753] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__params, 1), + [2755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1256), + [2757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1126), + [2759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [2761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292), + [2763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258), + [2765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1285), + [2767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1090), + [2769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(509), + [2771] = {.entry = {.count = 1, .reusable = true}}, SHIFT(510), + [2773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869), + [2775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1255), + [2777] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generic, 1), + [2779] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1023), + [2781] = {.entry = {.count = 1, .reusable = true}}, SHIFT(883), + [2783] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1282), + [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1084), + [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [2791] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 3), + [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), + [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(882), + [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [2799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(910), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1349), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1178), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1269), + [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1083), + [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1229), + [2811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1125), + [2813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(900), + [2815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1241), + [2817] = {.entry = {.count = 1, .reusable = true}}, SHIFT(798), + [2819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expr_field, 1), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1275), + [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089), + [2825] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1211), + [2829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [2831] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variant, 4), + [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1561), + [2835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), + [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1079), + [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), + [2841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), + [2843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), + [2845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489), + [2847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1098), + [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(518), + [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(994), + [2853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1166), + [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1115), + [2857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(887), + [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1265), + [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1421), + [2865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), + [2867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(897), + [2871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1136), + [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1444), + [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1330), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [2879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1110), + [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1331), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1442), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1133), + [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1130), + [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1437), + [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(888), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1153), + [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [2899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1396), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), + [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1551), + [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1144), + [2907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1554), + [2909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1565), + [2911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(496), + [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1245), + [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [2917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), + [2919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1557), + [2921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1145), + [2923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1560), + [2925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(498), + [2927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1310), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1286), + [2937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [2939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1403), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(931), + [2943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142), + [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), + [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(511), + [2949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(884), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1080), + [2953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(513), + [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1568), + [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1160), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155), + [2973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [2975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [2979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), + [2981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1279), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [2985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [2987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1189), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [2991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), + [2993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1117), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(930), + [2997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(451), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1105), + [3001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1413), + [3003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1240), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [3007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1100), + [3009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1356), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1368), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1366), + [3015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1375), + [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(927), + [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(484), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1216), + [3025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [3027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1187), + [3029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1466), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), + [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1235), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(999), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(914), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1387), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1135), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1506), + [3047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1390), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(921), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1147), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1221), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1118), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(916), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1201), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(918), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), + [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(929), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(925), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1388), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1479), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1097), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1137), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(876), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1096), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(886), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(837), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1134), + [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1347), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(880), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1197), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [3107] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1120), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1452), + [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(913), + [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1525), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1526), + [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1143), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1316), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1447), + [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1191), + [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1205), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1181), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1537), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1397), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1399), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), + [3143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1558), + [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1538), +}; + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _WIN32 +#define extern __declspec(dllexport) +#endif + +extern const TSLanguage *tree_sitter_aqua(void) { + static const TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = ts_field_map_slices, + .field_map_entries = ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + .keyword_lex_fn = ts_lex_keywords, + .keyword_capture_token = sym_name, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/crates/tree-sitter-aqua/src/tree_sitter/parser.h b/crates/tree-sitter-aqua/src/tree_sitter/parser.h new file mode 100644 index 0000000..2b14ac1 --- /dev/null +++ b/crates/tree-sitter-aqua/src/tree_sitter/parser.h @@ -0,0 +1,224 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +typedef uint16_t TSStateId; + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char * const *symbol_names; + const char * const *field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; + const TSStateId *primary_state_ids; +}; + +/* + * Lexer Macros + */ + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) id - LARGE_STATE_COUNT + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value, \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_val, child_count_val, ...) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/experiments/libffi/library/Cargo.lock b/experiments/libffi/library/Cargo.lock new file mode 100644 index 0000000..a362402 --- /dev/null +++ b/experiments/libffi/library/Cargo.lock @@ -0,0 +1,127 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libffi" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce826c243048e3d5cec441799724de52e2d42f820468431fc3fceee2341871e2" +dependencies = [ + "libc", + "libffi-sys", +] + +[[package]] +name = "libffi-sys" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36115160c57e8529781b4183c2bb51fdc1f6d6d1ed345591d84be7703befb3c" +dependencies = [ + "cc", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys", +] + +[[package]] +name = "library" +version = "0.1.0" +dependencies = [ + "libffi", + "libloading", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/experiments/libffi/library/Cargo.toml b/experiments/libffi/library/Cargo.toml new file mode 100644 index 0000000..6d0e221 --- /dev/null +++ b/experiments/libffi/library/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] + +[package] +name = "library" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +libffi = "3.2.0" +libloading = "0.8.1" diff --git a/experiments/libffi/library/src/lib.rs b/experiments/libffi/library/src/lib.rs new file mode 100644 index 0000000..a6245cc --- /dev/null +++ b/experiments/libffi/library/src/lib.rs @@ -0,0 +1,66 @@ +#[no_mangle] +pub extern "C" fn add(a: i32, b: i32) -> i32 { + a + b +} + +#[repr(C)] +pub struct Pair { + pub x: L, + pub y: R, +} + +#[no_mangle] +pub extern "C" fn pair(x: i32, y: i32) -> Pair { + Pair { x, y } +} + +#[no_mangle] +pub extern "C" fn pair2(x: i64, y: i32) -> Pair { + Pair { x, y } +} + +#[no_mangle] +pub extern "C" fn fst(p: Pair) -> i32 { + p.x +} + +#[no_mangle] +pub extern "C" fn snd(p: Pair) -> i32 { + p.y +} + +#[repr(u8)] +pub enum Color { + Red, + Green, + Blue, +} + +#[no_mangle] +pub extern "C" fn is_red(c: Color) -> bool { + matches!(c, Color::Red) +} + +#[repr(C)] +pub enum Maybe { + Nothing, + Just(T), +} + +#[no_mangle] +pub extern "C" fn just(just: i32) -> Maybe { + Maybe::Just(just) +} + +#[no_mangle] +pub extern "C" fn nothing() -> Maybe { + Maybe::Nothing +} + +#[no_mangle] +pub extern "C" fn unwrap(m: Maybe) -> i32 { + match m { + Maybe::Just(x) => x, + Maybe::Nothing => panic!("unwrap called on Nothing"), + } +} diff --git a/experiments/libffi/loader/Cargo.lock b/experiments/libffi/loader/Cargo.lock new file mode 100644 index 0000000..3f2deb6 --- /dev/null +++ b/experiments/libffi/loader/Cargo.lock @@ -0,0 +1,127 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libffi" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce826c243048e3d5cec441799724de52e2d42f820468431fc3fceee2341871e2" +dependencies = [ + "libc", + "libffi-sys", +] + +[[package]] +name = "libffi-sys" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36115160c57e8529781b4183c2bb51fdc1f6d6d1ed345591d84be7703befb3c" +dependencies = [ + "cc", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys", +] + +[[package]] +name = "loader" +version = "0.1.0" +dependencies = [ + "libffi", + "libloading", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/experiments/libffi/loader/Cargo.toml b/experiments/libffi/loader/Cargo.toml new file mode 100644 index 0000000..be13ab7 --- /dev/null +++ b/experiments/libffi/loader/Cargo.toml @@ -0,0 +1,10 @@ +[workspace] + +[package] +name = "loader" +version = "0.1.0" +edition = "2021" + +[dependencies] +libloading = "0.8.1" +libffi = "3.2.0" diff --git a/experiments/libffi/loader/build.rs b/experiments/libffi/loader/build.rs new file mode 100644 index 0000000..b525177 --- /dev/null +++ b/experiments/libffi/loader/build.rs @@ -0,0 +1,24 @@ +use std::env; +use std::process::Command; + +fn main() { + let library_dir = env::current_dir() + .unwrap() + .parent() + .unwrap() + .join("library"); + + println!("cargo:rerun-if-changed={}", library_dir.display()); + + let status = Command::new("cargo") + .arg("build") + .arg("--release") + .arg("--manifest-path") + .arg(library_dir.join("Cargo.toml")) + .status() + .unwrap(); + + if !status.success() { + panic!("Failed to build the crate in the parent directory"); + } +} diff --git a/experiments/libffi/loader/src/lib.rs b/experiments/libffi/loader/src/lib.rs new file mode 100644 index 0000000..5bae205 --- /dev/null +++ b/experiments/libffi/loader/src/lib.rs @@ -0,0 +1,254 @@ +#![allow(unused)] +use std::alloc::Layout; +use std::ffi::c_void; +use std::path::PathBuf; +use std::rc::Rc; + +use libloading::os::unix::Symbol; +use libloading::Library; + +use libffi::middle::*; + +#[cfg(target_os = "macos")] +const LIB_PATH: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../library/target/debug/liblibrary.dylib" +); + +#[cfg(target_os = "linux")] +const LIB_PATH: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../library/target/debug/liblibrary.so" +); + +#[cfg(target_os = "windows")] +const LIB_PATH: &str = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../library/target/debug/liblibrary.dll" +); + +fn load() -> Library { + unsafe { Library::new(LIB_PATH).unwrap() } +} + +fn fun<'a>(lib: &'a Library, name: &str) -> libloading::Symbol<'a, *mut c_void> { + unsafe { lib.get(name.as_bytes()).unwrap() } +} + +fn cif(arg_types: [Type; N], ret_type: Type) -> Cif { + Builder::new().args(arg_types).res(ret_type).into_cif() +} + +#[test] +fn test_i32_add() { + let lib = load(); + let fun = fun(&lib, "add"); + let res = unsafe { + cif([Type::i32(), Type::i32()], Type::i32()) + .call::(CodePtr(*fun), &[Arg::new(&10), Arg::new(&20)]) + }; + assert_eq!(res, 30); +} + +#[derive(Debug, PartialEq)] +#[repr(C)] +struct Pair { + x: L, + y: R, +} + +#[test] +fn test_struct_pair() { + let lib = load(); + let fun = fun(&lib, "pair"); + let res = unsafe { + cif( + [Type::i32(), Type::i32()], + Type::structure([Type::i32(), Type::i32()]), + ) + .call::>(CodePtr(*fun), &[Arg::new(&10), Arg::new(&20)]) + }; + assert_eq!(res, Pair { x: 10, y: 20 }); +} + +#[test] +fn test_struct_pair2() { + let lib = load(); + let fun = fun(&lib, "pair2"); + let res = unsafe { + cif( + [Type::i64(), Type::i32()], + Type::structure([Type::i64(), Type::i32()]), + ) + .call::>(CodePtr(*fun), &[Arg::new(&10i64), Arg::new(&20i32)]) + }; + assert_eq!(res, Pair { x: 10i64, y: 20i32 }); +} + +#[test] +fn test_struct_fst() { + let lib = load(); + let fun = fun(&lib, "fst"); + let res = unsafe { + cif([Type::structure([Type::i32(), Type::i32()])], Type::i32()) + .call::(CodePtr(*fun), &[Arg::new(&Pair { x: 10, y: 20 })]) + }; + assert_eq!(res, 10); +} + +#[test] +fn test_struct_fst_raw() { + let lib = load(); + let v: Vec = vec![0; 4]; + let fun = fun(&lib, "fst"); + let rvalue = v.as_ptr() as *mut c_void; + let avalue = &[Arg::new(&Pair { x: 10, y: 20 })]; + let avalue = avalue.as_ptr() as *mut *mut c_void; + + unsafe { + let fun = Some(*CodePtr(*fun).as_fun()); + let cif = cif([Type::structure([Type::i32(), Type::i32()])], Type::i32()); + libffi::raw::ffi_call(cif.as_raw_ptr(), fun, rvalue, avalue); + } + + let res = unsafe { *(rvalue as *const i32) }; + assert_eq!(res, 10); +} + +#[test] +fn test_struct_snd() { + let lib = load(); + let fun = fun(&lib, "snd"); + let res = unsafe { + cif([Type::structure([Type::i32(), Type::i32()])], Type::i32()) + .call::(CodePtr(*fun), &[Arg::new(&Pair { x: 10, y: 20 })]) + }; + assert_eq!(res, 20); +} + +#[repr(u8)] +enum Color { + Red, + Green, + Blue, +} + +#[test] +fn test_enum_color() { + let lib = load(); + let fun = fun(&lib, "is_red"); + let res = unsafe { + cif([Type::u8()], Type::u8()).call::(CodePtr(*fun), &[Arg::new(&Color::Red)]) != 0 + }; + assert_eq!(res, true); + let res = unsafe { + cif([Type::u8()], Type::u8()).call::(CodePtr(*fun), &[Arg::new(&Color::Green)]) != 0 + }; + assert_eq!(res, false); +} + +/// #[repr(C)] +/// pub struct MaybeRepr { +/// tag: MaybeTag, +/// payload: MaybePayload, +/// } +/// #[repr(u8)] +/// enum MaybeTag { +/// Nothing, +/// Just, +/// } +/// +/// #[repr(C)] +/// pub union MaybePayload { +/// Nothing: MaybePayloadNothing, +/// Just: MaybePayloadJust, +/// } +/// +/// #[repr(C)] +/// pub struct MaybePayloadNothing; +/// +/// #[repr(C)] +/// pub struct MaybePayloadJust(i32); +#[derive(PartialEq, Debug)] +#[repr(C, u8)] +pub enum Maybe { + Nothing, + Just(T), +} + +fn type_enum(variants: [Type; N]) -> Type { + let t = variants + .into_iter() + .max_by_key(|t| unsafe { t.as_raw_ptr().read().size }) + .unwrap(); + Type::structure([Type::u8(), t]) +} + +#[test] +fn test_enum_just() { + let lib = load(); + let fun = fun(&lib, "just"); + let out = type_enum([Type::i32()]); + let res = + unsafe { cif([Type::i32()], out).call::>(CodePtr(*fun), &[Arg::new(&123)]) }; + assert_eq!(res, Maybe::Just(123)); +} + +#[test] +fn test_enum_nothing() { + let lib = load(); + let fun = fun(&lib, "nothing"); + let out = type_enum([Type::i32()]); + let res = unsafe { cif([], out).call::>(CodePtr(*fun), &[]) }; + assert_eq!(res, Maybe::Nothing); +} + +#[test] +fn test_enum_just_pair() { + let lib = load(); + let fun = fun(&lib, "nothing"); + let out = type_enum([Type::structure([Type::i32(), Type::i32()])]); + let res = unsafe { cif([], out).call::>>(CodePtr(*fun), &[]) }; + assert_eq!(res, Maybe::Nothing); +} + +// #[test] +// fn test_head() { +// let struct_layout = Layout::new::() // size and alignment for the first field +// .extend(Layout::new::()) // size and alignment for the second field +// .unwrap() +// .0 +// .pad_to_align(); +// +// // Get the function pointer +// let func: libloading::Symbol<*mut c_void> = unsafe { lib.get(b"add").unwrap() }; +// +// // Prepare libffi types +// let arg_types = [Type::i32(), Type::i32()]; +// let ret_type = Type::i32(); +// +// let func_ptr = *func as *mut c_void; +// let code_ptr = CodePtr(func_ptr); +// +// // Create CIF +// let cif = Builder::new().args(arg_types).res(ret_type).into_cif(); +// +// // Prepare arguments +// let arg1 = 10; +// let arg2 = 20; +// let args = [Arg::new(&arg1), Arg::new(&arg2)]; +// +// // Call the function +// let result: i32 = unsafe { cif.call(code_ptr, &args) }; +// +// println!("Result: {}", result); +// } +// +// #[test] +// fn test2() { +// let lib = unsafe { +// Library::new("/Users/klasseg/Workspace/rust/aqua-dynamic-linking/dynamic/target/release/libdynamic.dylib").unwrap() +// }; +// +// let func: libloading::Symbol<*mut c_void> = unsafe { lib.get(b"add").unwrap() }; +// } diff --git a/experiments/nexmark/.gitignore b/experiments/nexmark/.gitignore new file mode 100644 index 0000000..024b8c6 --- /dev/null +++ b/experiments/nexmark/.gitignore @@ -0,0 +1,6 @@ +.* +!/.gitignore + +*.jsonl +*.csv +target/ diff --git a/experiments/nexmark/Dockerfile b/experiments/nexmark/Dockerfile new file mode 100644 index 0000000..d253cdb --- /dev/null +++ b/experiments/nexmark/Dockerfile @@ -0,0 +1,35 @@ +FROM aqua + +# Set the noninteractive timezone (prevents configuration prompts) +ARG DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe/London + +# Set a working directory +WORKDIR /aqua/experiments/nexmark/ + +# Install apt packages +RUN apt-get update && apt-get install -y \ + curl wget software-properties-common default-jdk python3 python3-pip maven + +# Install Apache Flink +RUN wget https://downloads.apache.org/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz \ + && tar xzf flink-1.18.1-bin-scala_2.12.tgz \ + && mv flink-1.18.1 /opt/flink +ENV PATH="/opt/flink/bin:${PATH}" + +# Set the environment variable for JAVA_HOME +RUN JAVA_HOME="$(dirname $(dirname $(update-alternatives --list | head -n 1)) | tail -1)" + +# Install Python dependencies +RUN pip install matplotlib numpy + +# Cleanup +RUN apt-get clean + +# Copy the Flink and Shark source code into the image +COPY . . + +# Copy Flink configuration +COPY flink-conf.yaml /opt/flink/conf/flink-conf.yaml + +CMD ["python3", "run.py"] diff --git a/experiments/nexmark/README.md b/experiments/nexmark/README.md new file mode 100644 index 0000000..97cb002 --- /dev/null +++ b/experiments/nexmark/README.md @@ -0,0 +1,21 @@ +# Nexmark Benchmark + +This directory contains the Nexmark benchmark implemented for Aqua. + +The benchmark contains 2 experiments: +* Experiment 1: The 8 standard Nexmark Queries. Each query: +* Experiment 2: A custom Sliding Window Aggregation query evaluated for different window sizes using bid data provided in the Nexmark dataset + +All queries process a total of 1M events. Queries target Rust and Flink, with and without optimisations. + +## Running + +To run the experiments, install and startup [docker](https://docs.docker.com/) and then run: + +```bash +./docker.sh +``` + +## Output + +After running, plots of the experiments can be found in the generated `output/` folder. diff --git a/experiments/nexmark/data-generator/Cargo.lock b/experiments/nexmark/data-generator/Cargo.lock new file mode 100644 index 0000000..0c57f14 --- /dev/null +++ b/experiments/nexmark/data-generator/Cargo.lock @@ -0,0 +1,367 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "data-generator" +version = "0.1.0" +dependencies = [ + "clap", + "csv", + "nexmark", + "serde", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "nexmark" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45fc401175963954a7046238c51799a99eaa4d8be7dd7a0c52dbf00813e52f92" +dependencies = [ + "lazy_static", + "rand", + "serde", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "serde" +version = "1.0.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.190" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/experiments/nexmark/data-generator/Cargo.toml b/experiments/nexmark/data-generator/Cargo.toml new file mode 100644 index 0000000..0cb0c29 --- /dev/null +++ b/experiments/nexmark/data-generator/Cargo.toml @@ -0,0 +1,12 @@ +[workspace] + +[package] +name = "data-generator" +version = "0.1.0" +edition = "2021" + +[dependencies] +nexmark = { version = "0.2.0", features = ["serde"] } +csv = "1.3.0" +serde = { version = "1.0.130", features = ["derive"] } +clap = { version = "4.0.0", features = ["derive"] } diff --git a/experiments/nexmark/data-generator/src/main.rs b/experiments/nexmark/data-generator/src/main.rs new file mode 100644 index 0000000..fd27c0c --- /dev/null +++ b/experiments/nexmark/data-generator/src/main.rs @@ -0,0 +1,85 @@ +use std::error::Error; +use std::fs::File; +use std::io::BufWriter; +use std::path::PathBuf; + +use clap::Parser; +use csv::WriterBuilder; +use nexmark::config::NexmarkConfig; +use nexmark::event::Event; +use nexmark::event::EventType; + +#[derive(Parser, Clone, Debug)] +struct Args { + /// Number of events to generate. + #[clap(long, default_value = "2000000")] + num_events: usize, + #[clap(long, default_value_t = false)] + persons: bool, + #[clap(long, default_value_t = false)] + auctions: bool, + #[clap(long, default_value_t = false)] + bids: bool, + #[clap(long, default_value = ".")] + dir: PathBuf, +} + +fn main() -> Result<(), Box> { + let args = Args::parse(); + let conf = NexmarkConfig { + // Set to 1700000000 (Tue Nov 14 2023 22:13:20 GMT+0000) to make events reproducible. + base_time: 1700000000, + ..Default::default() + }; + let mut total = 0; + if args.persons { + total += conf.person_proportion; + } + if args.auctions { + total += conf.auction_proportion; + } + if args.bids { + total += conf.bid_proportion; + } + if total == 0 { + return Err("At least one of --bids, --auctions, --persons must be set".into()); + } + std::fs::create_dir_all(&args.dir)?; + + for (name, ty, flag, proportion) in [ + ("persons", EventType::Person, args.persons, conf.person_proportion), + ("auctions", EventType::Auction, args.auctions, conf.auction_proportion), + ("bids", EventType::Bid, args.bids, conf.bid_proportion), + ] { + if flag == false { + continue; + } + let n = args.num_events * proportion / total; + println!("Generating {}*{}/{} = {} events", args.num_events, proportion, total, n); + + let file = File::create(args.dir.join(name).with_extension("csv"))?; + let mut writer = WriterBuilder::new() + .has_headers(false) + .from_writer(BufWriter::new(file)); + nexmark::EventGenerator::new(conf.clone()) + .with_type_filter(ty) + .take(n) + .enumerate() + .inspect(|(i, _)| { + let m = i + 1; + let p = n / 100; + if m % p == 10 { + let progress = m / p; + println!("{name}: {progress}%"); + } + }) + .try_for_each(|(_, event)| match event { + Event::Person(row) if ty == EventType::Person => writer.serialize(&row), + Event::Auction(row) if ty == EventType::Auction => writer.serialize(&row), + Event::Bid(row) if ty == EventType::Bid => writer.serialize(&row), + _ => unreachable!(), + })?; + } + + Ok(()) +} diff --git a/experiments/nexmark/docker.sh b/experiments/nexmark/docker.sh new file mode 100755 index 0000000..17b16ef --- /dev/null +++ b/experiments/nexmark/docker.sh @@ -0,0 +1,6 @@ +docker image rm -f aqua aqua-nexmark &>/dev/null && echo 'Removed old image' +docker container rm -f aqua-nexmark &>/dev/null && echo 'Removed old container' +docker build --tag aqua -f ../../Dockerfile ../../ +docker build --tag aqua-nexmark . +docker run --name aqua-nexmark aqua-nexmark +docker cp aqua-nexmark:/aqua/experiments/nexmark/output . diff --git a/experiments/nexmark/flink-conf.yaml b/experiments/nexmark/flink-conf.yaml new file mode 100644 index 0000000..1e247b2 --- /dev/null +++ b/experiments/nexmark/flink-conf.yaml @@ -0,0 +1,319 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +# These parameters are required for Java 17 support. +# They can be safely removed when using Java 8/11. +env.java.opts.all: --add-exports=java.base/sun.net.util=ALL-UNNAMED --add-exports=java.rmi/sun.rmi.registry=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED + +#============================================================================== +# Common +#============================================================================== + +# The external address of the host on which the JobManager runs and can be +# reached by the TaskManagers and any clients which want to connect. This setting +# is only used in Standalone mode and may be overwritten on the JobManager side +# by specifying the --host parameter of the bin/jobmanager.sh executable. +# In high availability mode, if you use the bin/start-cluster.sh script and setup +# the conf/masters file, this will be taken care of automatically. Yarn +# automatically configure the host name based on the hostname of the node where the +# JobManager runs. + +jobmanager.rpc.address: localhost + +# The RPC port where the JobManager is reachable. + +jobmanager.rpc.port: 6123 + +# The host interface the JobManager will bind to. By default, this is localhost, and will prevent +# the JobManager from communicating outside the machine/container it is running on. +# On YARN this setting will be ignored if it is set to 'localhost', defaulting to 0.0.0.0. +# On Kubernetes this setting will be ignored, defaulting to 0.0.0.0. +# +# To enable this, set the bind-host address to one that has access to an outside facing network +# interface, such as 0.0.0.0. + +jobmanager.bind-host: localhost + + +# The total process memory size for the JobManager. +# +# Note this accounts for all memory usage within the JobManager process, including JVM metaspace and other overhead. + +# jobmanager.memory.process.size: 1600m + +# The host interface the TaskManager will bind to. By default, this is localhost, and will prevent +# the TaskManager from communicating outside the machine/container it is running on. +# On YARN this setting will be ignored if it is set to 'localhost', defaulting to 0.0.0.0. +# On Kubernetes this setting will be ignored, defaulting to 0.0.0.0. +# +# To enable this, set the bind-host address to one that has access to an outside facing network +# interface, such as 0.0.0.0. + +taskmanager.bind-host: localhost + +# The address of the host on which the TaskManager runs and can be reached by the JobManager and +# other TaskManagers. If not specified, the TaskManager will try different strategies to identify +# the address. +# +# Note this address needs to be reachable by the JobManager and forward traffic to one of +# the interfaces the TaskManager is bound to (see 'taskmanager.bind-host'). +# +# Note also that unless all TaskManagers are running on the same machine, this address needs to be +# configured separately for each TaskManager. + +taskmanager.host: localhost + +# The total process memory size for the TaskManager. +# +# Note this accounts for all memory usage within the TaskManager process, including JVM metaspace and other overhead. + +# NOTE: These values are non-default +taskmanager.memory.process.size: 8192m +# taskmanager.memory.flink.size: 2048m +taskmanager.memory.managed.size: 2048m +taskmanager.memory.network.min: 1024m +taskmanager.memory.network.max: 2048m +jobmanager.memory.process.size: 4096m +taskmanager.memory.managed.fraction: 0.2 +# jobmanager.memory.flink.size: 1024m + +# To exclude JVM metaspace and overhead, please, use total Flink memory size instead of 'taskmanager.memory.process.size'. +# It is not recommended to set both 'taskmanager.memory.process.size' and Flink memory. +# +# taskmanager.memory.flink.size: 1280m + +# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline. + +taskmanager.numberOfTaskSlots: 1 + +# The parallelism used for programs that did not specify and other parallelism. + +parallelism.default: 1 + +# The default file system scheme and authority. +# +# By default file paths without scheme are interpreted relative to the local +# root file system 'file:///'. Use this to override the default and interpret +# relative paths relative to a different file system, +# for example 'hdfs://mynamenode:12345' +# +# fs.default-scheme + +#============================================================================== +# High Availability +#============================================================================== + +# The high-availability mode. Possible options are 'NONE' or 'zookeeper'. +# +# high-availability.type: zookeeper + +# The path where metadata for master recovery is persisted. While ZooKeeper stores +# the small ground truth for checkpoint and leader election, this location stores +# the larger objects, like persisted dataflow graphs. +# +# Must be a durable file system that is accessible from all nodes +# (like HDFS, S3, Ceph, nfs, ...) +# +# high-availability.storageDir: hdfs:///flink/ha/ + +# The list of ZooKeeper quorum peers that coordinate the high-availability +# setup. This must be a list of the form: +# "host1:clientPort,host2:clientPort,..." (default clientPort: 2181) +# +# high-availability.zookeeper.quorum: localhost:2181 + + +# ACL options are based on https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_BuiltinACLSchemes +# It can be either "creator" (ZOO_CREATE_ALL_ACL) or "open" (ZOO_OPEN_ACL_UNSAFE) +# The default value is "open" and it can be changed to "creator" if ZK security is enabled +# +# high-availability.zookeeper.client.acl: open + +#============================================================================== +# Fault tolerance and checkpointing +#============================================================================== + +# The backend that will be used to store operator state checkpoints if +# checkpointing is enabled. Checkpointing is enabled when execution.checkpointing.interval > 0. +# +# Execution checkpointing related parameters. Please refer to CheckpointConfig and ExecutionCheckpointingOptions for more details. +# +# execution.checkpointing.interval: 3min +# execution.checkpointing.externalized-checkpoint-retention: [DELETE_ON_CANCELLATION, RETAIN_ON_CANCELLATION] +# execution.checkpointing.max-concurrent-checkpoints: 1 +# execution.checkpointing.min-pause: 0 +# execution.checkpointing.mode: [EXACTLY_ONCE, AT_LEAST_ONCE] +# execution.checkpointing.timeout: 10min +# execution.checkpointing.tolerable-failed-checkpoints: 0 +# execution.checkpointing.unaligned: false +# +# Supported backends are 'hashmap', 'rocksdb', or the +# . +# +# state.backend.type: hashmap + +# Directory for checkpoints filesystem, when using any of the default bundled +# state backends. +# +# state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints + +# Default target directory for savepoints, optional. +# +# state.savepoints.dir: hdfs://namenode-host:port/flink-savepoints + +# Flag to enable/disable incremental checkpoints for backends that +# support incremental checkpoints (like the RocksDB state backend). +# +# state.backend.incremental: false + +# The failover strategy, i.e., how the job computation recovers from task failures. +# Only restart tasks that may have been affected by the task failure, which typically includes +# downstream tasks and potentially upstream tasks if their produced data is no longer available for consumption. + +jobmanager.execution.failover-strategy: region + +#============================================================================== +# Rest & web frontend +#============================================================================== + +# The port to which the REST client connects to. If rest.bind-port has +# not been specified, then the server will bind to this port as well. +# +#rest.port: 8081 + +# The address to which the REST client will connect to +# +rest.address: localhost + +# Port range for the REST and web server to bind to. +# +#rest.bind-port: 8080-8090 + +# The address that the REST & web server binds to +# By default, this is localhost, which prevents the REST & web server from +# being able to communicate outside of the machine/container it is running on. +# +# To enable this, set the bind address to one that has access to outside-facing +# network interface, such as 0.0.0.0. +# +rest.bind-address: localhost + +# Flag to specify whether job submission is enabled from the web-based +# runtime monitor. Uncomment to disable. + +#web.submit.enable: false + +# Flag to specify whether job cancellation is enabled from the web-based +# runtime monitor. Uncomment to disable. + +#web.cancel.enable: false + +#============================================================================== +# Advanced +#============================================================================== + +# Override the directories for temporary files. If not specified, the +# system-specific Java temporary directory (java.io.tmpdir property) is taken. +# +# For framework setups on Yarn, Flink will automatically pick up the +# containers' temp directories without any need for configuration. +# +# Add a delimited list for multiple directories, using the system directory +# delimiter (colon ':' on unix) or a comma, e.g.: +# /data1/tmp:/data2/tmp:/data3/tmp +# +# Note: Each directory entry is read from and written to by a different I/O +# thread. You can include the same directory multiple times in order to create +# multiple I/O threads against that directory. This is for example relevant for +# high-throughput RAIDs. +# +# io.tmp.dirs: /tmp + +# The classloading resolve order. Possible values are 'child-first' (Flink's default) +# and 'parent-first' (Java's default). +# +# Child first classloading allows users to use different dependency/library +# versions in their application than those in the classpath. Switching back +# to 'parent-first' may help with debugging dependency issues. +# +# classloader.resolve-order: child-first + +# The amount of memory going to the network stack. These numbers usually need +# no tuning. Adjusting them may be necessary in case of an "Insufficient number +# of network buffers" error. The default min is 64MB, the default max is 1GB. +# +# taskmanager.memory.network.fraction: 0.1 +# taskmanager.memory.network.min: 64mb +# taskmanager.memory.network.max: 1gb + +#============================================================================== +# Flink Cluster Security Configuration +#============================================================================== + +# Kerberos authentication for various components - Hadoop, ZooKeeper, and connectors - +# may be enabled in four steps: +# 1. configure the local krb5.conf file +# 2. provide Kerberos credentials (either a keytab or a ticket cache w/ kinit) +# 3. make the credentials available to various JAAS login contexts +# 4. configure the connector to use JAAS/SASL + +# The below configure how Kerberos credentials are provided. A keytab will be used instead of +# a ticket cache if the keytab path and principal are set. + +# security.kerberos.login.use-ticket-cache: true +# security.kerberos.login.keytab: /path/to/kerberos/keytab +# security.kerberos.login.principal: flink-user + +# The configuration below defines which JAAS login contexts + +# security.kerberos.login.contexts: Client,KafkaClient + +#============================================================================== +# ZK Security Configuration +#============================================================================== + +# Below configurations are applicable if ZK ensemble is configured for security + +# Override below configuration to provide custom ZK service name if configured +# zookeeper.sasl.service-name: zookeeper + +# The configuration below must match one of the values set in "security.kerberos.login.contexts" +# zookeeper.sasl.login-context-name: Client + +#============================================================================== +# HistoryServer +#============================================================================== + +# The HistoryServer is started and stopped via bin/historyserver.sh (start|stop) + +# Directory to upload completed jobs to. Add this directory to the list of +# monitored directories of the HistoryServer as well (see below). +#jobmanager.archive.fs.dir: hdfs:///completed-jobs/ + +# The address under which the web-based HistoryServer listens. +#historyserver.web.address: 0.0.0.0 + +# The port under which the web-based HistoryServer listens. +#historyserver.web.port: 8082 + +# Comma separated list of directories to monitor for completed jobs. +#historyserver.archive.fs.dir: hdfs:///completed-jobs/ + +# Interval in milliseconds for refreshing the monitored directories. +#historyserver.archive.fs.refresh-interval: 10000 + diff --git a/experiments/nexmark/queries/flink/pom.xml b/experiments/nexmark/queries/flink/pom.xml new file mode 100644 index 0000000..86a41ef --- /dev/null +++ b/experiments/nexmark/queries/flink/pom.xml @@ -0,0 +1,93 @@ + + 4.0.0 + + org.example + flink-nexmark + 1.0-SNAPSHOT + My Flink Project + + + UTF-8 + 1.18.1 + 1.8 + + + + + + org.apache.flink + flink-java + ${flink.version} + + + org.apache.flink + flink-core + ${flink.version} + + + org.apache.flink + flink-streaming-java + ${flink.version} + + + org.apache.flink + flink-connector-files + ${flink.version} + + + org.apache.flink + flink-csv + ${flink.version} + + + org.apache.flink + flink-json + ${flink.version} + + + org.apache.flink + flink-clients + ${flink.version} + + + org.apache.flink + flink-statebackend-rocksdb + ${flink.version} + + + + org.apache.flink + flink-table-api-java-bridge + ${flink.version} + + + + + + + + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + + maven-jar-plugin + 3.2.0 + + + + true + org.example.Main + + + + + + + diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/Main.java b/experiments/nexmark/queries/flink/src/main/java/org/example/Main.java new file mode 100644 index 0000000..17dbb5b --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/Main.java @@ -0,0 +1,158 @@ +package org.example; + +import org.apache.flink.api.common.JobExecutionResult; +import org.apache.flink.api.common.typeinfo.TypeHint; +import org.apache.flink.api.common.typeinfo.TypeInformation; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.example.data.Auction; +import org.example.data.Bid; +import org.example.data.Person; +import org.example.queries.*; +import org.example.io.*; + +import java.util.Optional; + +public class Main { + public static void main(String[] args) throws Exception { + + if (args.length == 0) { + System.out.println("No query specified"); + return; + } + String dir = args[0]; + String query = args[1]; + + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setParallelism(1); + env.setMaxParallelism(1); + + Optional> auctions = read(env, dir + "/auctions.csv", Auction.class, TypeInformation.of(new TypeHint() { + })); + Optional> persons = read(env, dir + "/persons.csv", Person.class, TypeInformation.of(new TypeHint() { + })); + Optional> bids = read(env, dir + "/bids.csv", Bid.class, TypeInformation.of(new TypeHint() { + })); + + switch (query) { + case "q1": { + assert bids.isPresent(); + Q1.run(bids.get()); + break; + } + case "q2": { + assert bids.isPresent(); + Q2.run(bids.get()); + break; + } + case "q3": { + assert persons.isPresent() && auctions.isPresent(); + Q3.run(persons.get(), auctions.get()); + break; + } + case "q4": { + assert auctions.isPresent() && bids.isPresent(); + Q4.run(auctions.get(), bids.get()); + break; + } + case "q5": { + assert bids.isPresent(); + Q5.run(bids.get()); + break; + } + case "q6": { + assert auctions.isPresent() && bids.isPresent(); + Q6.run(auctions.get(), bids.get()); + break; + } + case "q7": { + assert bids.isPresent(); + Q7.run(bids.get()); + break; + } + case "q8": { + assert auctions.isPresent() && persons.isPresent(); + Q8.run(auctions.get(), persons.get()); + break; + } + case "qw": { + assert bids.isPresent(); + long size = Long.parseLong(args[2]); + long slide = Long.parseLong(args[3]); + QW.run(bids.get(), size, slide); + break; + } + case "q1-opt": { + assert bids.isPresent(); + Q1.runOpt(bids.get()); + break; + } + case "q2-opt": { + assert bids.isPresent(); + Q2.runOpt(bids.get()); + break; + } + case "q3-opt": { + assert persons.isPresent() && auctions.isPresent(); + Q3.runOpt(persons.get(), auctions.get()); + break; + } + case "q4-opt": { + assert auctions.isPresent() && bids.isPresent(); + Q4.runOpt(auctions.get(), bids.get()); + break; + } + case "q5-opt": { + assert bids.isPresent(); + Q5.runOpt(bids.get()); + break; + } + case "q6-opt": { + assert auctions.isPresent() && bids.isPresent(); + Q6.runOpt(auctions.get(), bids.get()); + break; + } + case "q7-opt": { + assert bids.isPresent(); + Q7.runOpt(bids.get()); + break; + } + case "q8-opt": { + assert auctions.isPresent() && persons.isPresent(); + Q8.runOpt(auctions.get(), persons.get()); + break; + } + case "qw-opt": { + assert bids.isPresent(); + long size = Long.parseLong(args[2]); + long slide = Long.parseLong(args[3]); + QW.runOpt(bids.get(), size, slide); + break; + } + case "io": { + auctions.ifPresent(auctionDataStream -> auctionDataStream.addSink(new DataSink<>())); + persons.ifPresent(personDataStream -> personDataStream.addSink(new DataSink<>())); + bids.ifPresent(bidDataStream -> bidDataStream.addSink(new DataSink<>())); + break; + } + default: + System.out.println("Unknown query: " + query); + throw new IllegalArgumentException("Unknown query: " + query); + } + + JobExecutionResult result = env.execute(); + System.err.println(result.getNetRuntime()); + } + + public static Long WatermarkFrequency = 1000L; + public static Long Slack = 100L; + public static > Optional> read(StreamExecutionEnvironment env, String path, Class c, TypeInformation ti) { + if (new java.io.File(path).exists()) { + return Optional.of(env + .addSource(new DataSource(() -> new CsvFileIterator(path, c), WatermarkFrequency, Slack)) + .returns(ti)); + } else { + return Optional.empty(); + } + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/data/Auction.java b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Auction.java new file mode 100644 index 0000000..d743022 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Auction.java @@ -0,0 +1,43 @@ +package org.example.data; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.example.io.DataSource; + +import java.io.Serializable; +import java.time.Instant; + +@JsonPropertyOrder({"id", "itemName", "description", "initialBid", "reserve", "dateTime", "expires", "seller", "category", "extra"}) +public class Auction implements Serializable, DataSource.TimestampExtractor { + public long id; + public String itemName; + public String description; + public long initialBid; + public long reserve; + public long dateTime; + public long expires; + public long seller; + public long category; + public String extra; + + public Auction(long id, String itemName, String description, long initialBid, long reserve, long dateTime, long expires, long seller, long category, String extra) { + this.id = id; + this.itemName = itemName; + this.description = description; + this.initialBid = initialBid; + this.reserve = reserve; + this.dateTime = dateTime; + this.expires = expires; + this.seller = seller; + this.category = category; + this.extra = extra; + } + + public Auction() { + } + + @Override + public long extractTimestamp() { + return this.dateTime; + } +} + diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/data/Bid.java b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Bid.java new file mode 100644 index 0000000..0559a23 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Bid.java @@ -0,0 +1,38 @@ +package org.example.data; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.example.io.DataSource; + +import java.io.Serializable; +import java.time.Instant; + + +@JsonPropertyOrder({"auction", "bidder", "price", "channel", "url", "dateTime", "extra"}) +public class Bid implements Serializable, DataSource.TimestampExtractor { + public long auction; + public long bidder; + public long price; + public String channel; + public String url; + public long dateTime; + public String extra; + + public Bid(long auction, long bidder, long price, String channel, String url, long dateTime, String extra) { + this.auction = auction; + this.bidder = bidder; + this.price = price; + this.channel = channel; + this.url = url; + this.dateTime = dateTime; + this.extra = extra; + } + + public Bid() {} + + @Override + public long extractTimestamp() { + return this.dateTime; + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/data/Person.java b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Person.java new file mode 100644 index 0000000..2e6ae4d --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/data/Person.java @@ -0,0 +1,38 @@ +package org.example.data; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.example.io.DataSource; + +import java.io.Serializable; +import java.time.Instant; + +@JsonPropertyOrder({"id", "name", "emailAddress", "creditCard", "city", "state", "dateTime", "extra"}) +public class Person implements Serializable, DataSource.TimestampExtractor { + public long id; + public String name; + public String emailAddress; + public String creditCard; + public String city; + public String state; + public long dateTime; + public String extra; + + public Person(long id, String name, String emailAddress, String creditCard, String city, String state, long dateTime, String extra) { + this.id = id; + this.name = name; + this.emailAddress = emailAddress; + this.creditCard = creditCard; + this.city = city; + this.state = state; + this.dateTime = dateTime; + this.extra = extra; + } + + public Person() { + } + + @Override + public long extractTimestamp() { + return this.dateTime; + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvFileIterator.java b/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvFileIterator.java new file mode 100644 index 0000000..2c7bc80 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvFileIterator.java @@ -0,0 +1,43 @@ +package org.example.io; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.MappingIterator; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvMapper; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvSchema; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.io.Serializable; +import java.util.Iterator; + +public class CsvFileIterator implements Serializable, Iterator { + private final MappingIterator iter; + + public CsvFileIterator(String filePath, Class targetType) { + try { + BufferedReader br = new BufferedReader(new FileReader(filePath)); + + CsvMapper mapper = new CsvMapper(); + CsvSchema schema = mapper + .schemaFor(targetType) + .withHeader(); + + this.iter = mapper + .readerFor(targetType) + .with(schema) + .readValues(br); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public T next() { + return iter.next(); + } +} \ No newline at end of file diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvMmapIterator.java b/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvMmapIterator.java new file mode 100644 index 0000000..f8ba36d --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/io/CsvMmapIterator.java @@ -0,0 +1,49 @@ +package org.example.io; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.MappingIterator; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvMapper; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.dataformat.csv.CsvSchema; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.io.Serializable; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; + +public class CsvMmapIterator implements Serializable, Iterator { + private final Iterator iter; + public CsvMmapIterator(String filePath, Class targetType) { + try (RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "r"); + FileChannel fileChannel = randomAccessFile.getChannel()) { + + MappedByteBuffer buffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size()); + byte[] byteArray = new byte[buffer.remaining()]; + buffer.get(byteArray); + + CsvMapper mapper = new CsvMapper(); + CsvSchema schema = mapper + .schemaFor(targetType) + .withHeader(); + + this.iter = mapper + .readerFor(targetType) + .with(schema) + .readValues(new String(byteArray, StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public T next() { + return iter.next(); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSink.java b/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSink.java new file mode 100644 index 0000000..cee3aa5 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSink.java @@ -0,0 +1,14 @@ +package org.example.io; + +import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; + +public class DataSink extends RichSinkFunction { + + public DataSink() { + } + + @Override + public void invoke(T value, Context context) throws Exception { + } + +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSource.java b/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSource.java new file mode 100644 index 0000000..848a79e --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/io/DataSource.java @@ -0,0 +1,65 @@ +package org.example.io; + +import org.apache.flink.streaming.api.functions.source.RichSourceFunction; +import org.apache.flink.streaming.api.watermark.Watermark; + +import java.io.Serializable; +import java.util.Iterator; + +public class DataSource> extends RichSourceFunction { + + private volatile boolean isRunning = true; + private final long frequency; + private final long slack; + private final IteratorInit uninitializedIterator; + + public DataSource(IteratorInit uninitializedIterator, long slack, long frequency) { + this.frequency = frequency; + this.slack = slack; + this.uninitializedIterator = uninitializedIterator; + } + + @Override + public void run(SourceContext ctx) throws Exception { + Iterator iter = uninitializedIterator.init(); + long watermark = 0; + long latestTimestamp = 0; + long i = 0; + while (isRunning && iter.hasNext()) { + T event = iter.next(); + long timestamp = event.extractTimestamp(); + + if (timestamp < watermark) { + continue; + } + if (timestamp > latestTimestamp) { + latestTimestamp = timestamp; + } + if (i % frequency == 0) { + watermark = timestamp - slack; + ctx.emitWatermark(new Watermark(watermark)); + } + + try { + ctx.collectWithTimestamp(event, timestamp); + i++; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public void cancel() { + isRunning = false; + } + + @FunctionalInterface + public interface TimestampExtractor extends Serializable { + long extractTimestamp(); + } + + public interface IteratorInit extends Serializable { + Iterator init(); + } +} \ No newline at end of file diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/operators/FilterMap.java b/experiments/nexmark/queries/flink/src/main/java/org/example/operators/FilterMap.java new file mode 100644 index 0000000..4cda117 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/operators/FilterMap.java @@ -0,0 +1,25 @@ +package org.example.operators; + +import org.apache.flink.streaming.api.functions.ProcessFunction; +import org.apache.flink.util.Collector; + +import java.io.Serializable; +import java.util.Optional; + +public class FilterMap extends ProcessFunction { + final UDF udf; + + public FilterMap(UDF udf) { + this.udf = udf; + } + + @Override + public void processElement(I i, ProcessFunction.Context context, Collector collector) { + udf.udf(i).ifPresent(collector::collect); + } + + @FunctionalInterface + public interface UDF extends Serializable { + Optional udf(I i); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q1.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q1.java new file mode 100644 index 0000000..9e48d09 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q1.java @@ -0,0 +1,41 @@ +package org.example.queries; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.example.data.Bid; +import org.example.io.DataSink; + +public class Q1 { + + @JsonPropertyOrder({"auction", "price", "bidder", "dateTime"}) + public static class Output { + public long auction; + public long price; + public long bidder; + public long dateTime; + + public Output(long auction, long price, long bidder, long dateTime) { + this.auction = auction; + this.price = price; + this.bidder = bidder; + this.dateTime = dateTime; + } + + public Output() { + } + } + + public static void run(DataStream bids) { + bids + .map(b -> new Output(b.auction, (long) Math.floor(b.price * 0.85), b.bidder, b.dateTime)) + .returns(Output.class) + .addSink(new DataSink()); + } + + public static void runOpt(DataStream bids) { + bids + .map(b -> new Output(b.auction, (long) Math.floor(b.price * 0.85), b.bidder, b.dateTime)) + .returns(Output.class) + .addSink(new DataSink()); + } +} \ No newline at end of file diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q2.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q2.java new file mode 100644 index 0000000..b0fa153 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q2.java @@ -0,0 +1,57 @@ +package org.example.queries; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.example.data.Bid; +import org.example.io.DataSink; +import org.example.operators.FilterMap; +import java.util.Optional; + +public class Q2 { + @JsonPropertyOrder({"auction", "price"}) + public static class Output { + public long auction; + public long price; + + public Output(long auction, long price) { + this.auction = auction; + this.price = price; + } + + public Output() { + } + } + + public static void run(DataStream bids) { + bids + .filter(b -> b.auction == 1007 + || b.auction == 1020 + || b.auction == 2001 + || b.auction == 2019 + || b.auction == 2087) + .map(b -> new Output(b.auction, b.price)) + .returns(Q2.Output.class) + .addSink(new DataSink()); + } + + // Optimisations: + // - Fuse filter and map + public static void runOpt(DataStream bids) { + bids + .process(new FilterMap(b -> { + if (b.auction == 1007 + || b.auction == 1020 + || b.auction == 2001 + || b.auction == 2019 + || b.auction == 2087) { + return Optional.of(new Q2.Output(b.auction, b.price)); + } else { + return Optional.empty(); + } + })) + .returns(Q2.Output.class) + .addSink(new DataSink()); + } + + +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q3.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q3.java new file mode 100644 index 0000000..d328665 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q3.java @@ -0,0 +1,119 @@ +package org.example.queries; + +import org.apache.flink.api.common.functions.JoinFunction; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.example.data.Auction; +import org.example.data.Person; +import org.example.io.DataSink; +import org.example.operators.FilterMap; + +import java.util.Optional; + +// Who is selling in OR, ID or CA in category 10, and for what auction ids? +public class Q3 { + + @JsonPropertyOrder({"name", "city", "state", "id"}) + public static class Output { + public String name; + public String city; + public String state; + public long id; + + public Output(String name, String city, String state, long id) { + this.name = name; + this.city = city; + this.state = state; + this.id = id; + } + + public Output() { + } + } + + public static class PrunedPerson { + public long id; + public String name; + public String city; + public String state; + + public PrunedPerson(long id, String name, String city, String state) { + this.id = id; + this.name = name; + this.city = city; + this.state = state; + } + + public PrunedPerson() { + } + } + + public static class PrunedAuction { + public long seller; + public long id; + + public PrunedAuction(long seller, long id) { + this.seller = seller; + this.id = id; + } + + public PrunedAuction() { + } + } + + static Time size = Time.seconds(10); + + public static void run(DataStream persons, DataStream auctions) { + auctions.join(persons) + .where(auction -> auction.seller) + .equalTo(person -> person.id) + .window(TumblingEventTimeWindows.of(size)) + .apply(new JoinFunction>() { + @Override + public Tuple2 join(Auction auction, Person person) { + return new Tuple2(auction, person); + } + }) + .filter(tuple -> + (tuple.f1.state.equals("or") || tuple.f1.state.equals("id") || tuple.f1.state.equals("ca")) && tuple.f0.category == 10 + ) + .map(tuple -> new Output(tuple.f1.name, tuple.f1.city, tuple.f1.state, tuple.f0.id)) + .returns(Output.class) + .addSink(new DataSink()); + } + + // Optimisations: + // - Data pruning + // - Predicate pushdown + // - Fuse filter and map + public static void runOpt(DataStream persons, DataStream auctions) { + DataStream persons2 = persons + .process(new FilterMap(p -> { + if (p.state.equals("or") || p.state.equals("id") || p.state.equals("ca")) { + return Optional.of(new PrunedPerson(p.id, p.name, p.city, p.state)); + } else { + return Optional.empty(); + } + })) + .returns(PrunedPerson.class); + DataStream auctions2 = auctions + .process(new FilterMap(a -> { + if (a.category == 10) { + return Optional.of(new PrunedAuction(a.seller, a.id)); + } else { + return Optional.empty(); + } + })) + .returns(PrunedAuction.class); + auctions2 + .join(persons2) + .where(a -> a.seller) + .equalTo(p -> p.id) + .window(TumblingEventTimeWindows.of(size)) + .apply((a, p) -> new Output(p.name, p.city, p.state, a.id)) + .addSink(new DataSink()); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q4.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q4.java new file mode 100644 index 0000000..2069f07 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q4.java @@ -0,0 +1,185 @@ +package org.example.queries; + +import org.apache.flink.api.common.functions.JoinFunction; +import org.apache.flink.api.java.functions.KeySelector; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; +import org.example.data.Auction; +import org.example.data.Bid; +import org.example.io.DataSink; + +public class Q4 { + @JsonPropertyOrder({"auction", "price"}) + public static class Output { + public long auction; + public long price; + + public Output(long auction, long price) { + this.auction = auction; + this.price = price; + } + + public Output() { + } + } + + public static class PrunedAuction { + public long id; + public long category; + public long expires; + public long dateTime; + + public PrunedAuction(long id, long category, long expires, long dateTime) { + this.id = id; + this.category = category; + this.expires = expires; + this.dateTime = dateTime; + } + + public PrunedAuction() { + } + } + + public static class PrunedBid { + public long auction; + public long price; + public long dateTime; + + public PrunedBid(long auction, long price, long dateTime) { + this.auction = auction; + this.price = price; + this.dateTime = dateTime; + } + + public PrunedBid() { + } + } + + static Time size = Time.seconds(10); + + public static void run(DataStream auctions, DataStream bids) { + auctions.join(bids) + .where(a -> a.id) + .equalTo(b -> b.auction) + .window(TumblingEventTimeWindows.of(size)) + .apply(new JoinFunction>() { + @Override + public Tuple2 join(Auction auction, Bid bid) { + return new Tuple2(auction, bid); + } + }) + .filter(t -> t.f0.dateTime <= t.f1.dateTime && t.f1.dateTime <= t.f0.expires) + .keyBy(new KeySelector, Tuple2>() { + + @Override + public Tuple2 getKey(Tuple2 t) throws Exception { + return new Tuple2(t.f0.id, t.f0.category); + } + }) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction, Tuple2, Tuple2, TimeWindow>() { + @Override + public void apply( + Tuple2 key, + TimeWindow timeWindow, + Iterable> iterable, + Collector> collector + ) throws Exception { + long category = key.f1; + long max = Long.MIN_VALUE; + for (Tuple2 t : iterable) { + if (t.f1.price > max) { + max = t.f1.price; + } + } + collector.collect(new Tuple2(category, max)); + } + }) + .keyBy(t -> t.f0) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction, Output, Long, TimeWindow>() { + @Override + public void apply( + Long category, + TimeWindow timeWindow, + Iterable> iterable, + Collector collector + ) throws Exception { + long sum = 0; + for (Tuple2 t : iterable) { + sum += t.f1; + } + collector.collect(new Output(category, sum)); + } + }) + .addSink(new DataSink()); + } + + // Optimisations: + // * Data pruning + public static void runOpt(DataStream auctions, DataStream bids) { + DataStream prunedAuctions = auctions.map(a -> new PrunedAuction(a.id, a.category, a.expires, a.dateTime)); + DataStream prunedBids = bids.map(b -> new PrunedBid(b.auction, b.price, b.dateTime)); + prunedAuctions.join(prunedBids) + .where(a -> a.id) + .equalTo(b -> b.auction) + .window(TumblingEventTimeWindows.of(size)) + .apply(new JoinFunction>() { + @Override + public Tuple2 join(PrunedAuction auction, PrunedBid bid) { + return new Tuple2(auction, bid); + } + }) + .filter(t -> t.f0.dateTime <= t.f1.dateTime && t.f1.dateTime <= t.f0.expires) + .keyBy(new KeySelector, Tuple2>() { + + @Override + public Tuple2 getKey(Tuple2 t) throws Exception { + return new Tuple2(t.f0.id, t.f0.category); + } + }) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction, Tuple2, Tuple2, TimeWindow>() { + @Override + public void apply( + Tuple2 key, + TimeWindow timeWindow, + Iterable> iterable, + Collector> collector + ) throws Exception { + long category = key.f1; + long max = Long.MIN_VALUE; + for (Tuple2 t : iterable) { + if (t.f1.price > max) { + max = t.f1.price; + } + } + collector.collect(new Tuple2(category, max)); + } + }) + .keyBy(t -> t.f0) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction, Output, Long, TimeWindow>() { + @Override + public void apply( + Long category, + TimeWindow timeWindow, + Iterable> iterable, + Collector collector + ) throws Exception { + long sum = 0; + for (Tuple2 t : iterable) { + sum += t.f1; + } + collector.collect(new Output(category, sum)); + } + }) + .addSink(new DataSink()); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q5.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q5.java new file mode 100644 index 0000000..3b8463e --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q5.java @@ -0,0 +1,132 @@ +package org.example.queries; + +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.windowing.AllWindowFunction; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; +import org.example.data.Bid; +import org.example.io.DataSink; + +import java.util.Optional; + +public class Q5 { + @JsonPropertyOrder({"auction"}) + public static class Output { + public long auction; + + public Output(long auction) { + this.auction = auction; + } + + public Output() { + } + } + + public static class PrunedBid { + public long auction; + public long bidder; + + public PrunedBid(long auction, long bidder) { + this.auction = auction; + this.bidder = bidder; + } + + public PrunedBid() { + } + } + + static Time size = Time.minutes(5); + static Time slide = Time.minutes(1); + + public static void run(DataStream bids) { + bids.keyBy(b -> b.auction) + .window(SlidingEventTimeWindows.of(size, slide)) + .apply(new WindowFunction, Long, TimeWindow>() { + @Override + public void apply( + Long auction, + TimeWindow timeWindow, + Iterable iterable, + Collector> collector + ) throws Exception { + long count = 0; + for (Bid b : iterable) { + count++; + } + collector.collect(new Tuple2(auction, count)); + } + }) + .windowAll(SlidingEventTimeWindows.of(size, slide)) + .apply(new AllWindowFunction, Output, TimeWindow>() { + @Override + public void apply( + TimeWindow timeWindow, + Iterable> iterable, + Collector collector + ) throws Exception { + long max = Long.MIN_VALUE; + Optional auction = Optional.empty(); + for (Tuple2 t : iterable) { + if (t.f1 > max) { + max = t.f1; + auction = Optional.of(t.f0); + } + } + assert auction.isPresent(); + collector.collect(new Output(auction.get())); + } + }) + .returns(Output.class) + .addSink(new DataSink()); + } + + public static void runOpt(DataStream bids) { + DataStream prunedBids = bids.map(b -> new PrunedBid(b.auction, b.bidder)); + prunedBids.keyBy(b -> b.auction) + .window(SlidingEventTimeWindows.of(size, slide)) + .apply(new WindowFunction, Long, TimeWindow>() { + @Override + public void apply( + Long auction, + TimeWindow timeWindow, + Iterable iterable, + Collector> collector + ) throws Exception { + long count = 0; + for (PrunedBid b : iterable) { + count++; + } + collector.collect(new Tuple2(auction, count)); + } + }) + .windowAll(SlidingEventTimeWindows.of(size, slide)) + .apply(new AllWindowFunction, Output, TimeWindow>() { + @Override + public void apply( + TimeWindow timeWindow, + Iterable> iterable, + Collector collector + ) throws Exception { + long max = Long.MIN_VALUE; + Optional auction = Optional.empty(); + for (Tuple2 t : iterable) { + if (t.f1 > max) { + max = t.f1; + auction = Optional.of(t.f0); + } + } + assert auction.isPresent(); + collector.collect(new Output(auction.get())); + } + }) + .returns(Output.class) + .addSink(new DataSink()); + } + +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q6.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q6.java new file mode 100644 index 0000000..681cd2f --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q6.java @@ -0,0 +1,149 @@ +package org.example.queries; + +import org.apache.flink.api.common.functions.JoinFunction; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.GlobalWindow; +import org.apache.flink.util.Collector; +import org.example.data.Auction; +import org.example.data.Bid; +import org.example.io.DataSink; + +public class Q6 { + @JsonPropertyOrder({"seller", "avgBidPrice"}) + public static class Output { + public long seller; + public long avgBidPrice; + + public Output(long seller, long avgBidPrice) { + this.seller = seller; + this.avgBidPrice = avgBidPrice; + } + + public Output() { + } + } + + public static class JoinOutput { + public long auctionSeller; + public long auctionExpires; + public long auctionDateTime; + public long bidPrice; + public long bidDateTime; + + public JoinOutput(long auctionSeller, + long auctionExpires, + long auctionDateTime, + long bidPrice, + long bidDateTime) { + this.auctionSeller = auctionSeller; + this.auctionExpires = auctionExpires; + this.auctionDateTime = auctionDateTime; + this.bidPrice = bidPrice; + this.bidDateTime = bidDateTime; + } + + public JoinOutput() { + } + } + + public static class PrunedAuction { + public long id; + public long seller; + public long expires; + public long dateTime; + + public PrunedAuction(long id, long seller, long expires, long dateTime) { + this.id = id; + this.seller = seller; + this.expires = expires; + this.dateTime = dateTime; + } + + public PrunedAuction() { + } + } + + public static class PrunedBid { + public long auction; + public long price; + public long dateTime; + + public PrunedBid(long auction, long price, long dateTime) { + this.auction = auction; + this.price = price; + this.dateTime = dateTime; + } + + public PrunedBid() { + } + } + + static Time timeSize = Time.seconds(10); + static long countSize = 10; + static long countSlide = 1; + + public static void run(DataStream auctions, DataStream bids) { + auctions.join(bids) + .where(a -> a.id) + .equalTo(b -> b.auction) + .window(TumblingEventTimeWindows.of(timeSize)) + .apply(new JoinFunction() { + @Override + public JoinOutput join(Auction auction, Bid bid) { + return new JoinOutput(auction.seller, auction.expires, auction.dateTime, bid.price, bid.dateTime); + } + }) + .filter(i -> i.auctionDateTime < i.bidDateTime && i.bidDateTime < i.auctionExpires) + .keyBy(i -> i.auctionSeller) + .countWindow(countSize, countSlide) + .apply(new WindowFunction() { + + @Override + public void apply(Long seller, GlobalWindow globalWindow, Iterable iterable, Collector collector) throws Exception { + long sum = 0; + long count = 0; + for (JoinOutput i : iterable) { + sum += i.bidPrice; + count++; + } + collector.collect(new Output(seller, sum / count)); + } + }) + .addSink(new DataSink()) ; + } + + public static void runOpt(DataStream auctions, DataStream bids) { + DataStream prunedAuctions = auctions.map(a -> new PrunedAuction(a.id, a.seller, a.expires, a.dateTime)); + DataStream prunedBids = bids.map(b -> new PrunedBid(b.auction, b.price, b.dateTime)); + prunedAuctions.join(prunedBids) + .where(a -> a.id) + .equalTo(b -> b.auction) + .window(TumblingEventTimeWindows.of(timeSize)) + .apply(new JoinFunction() { + @Override + public JoinOutput join(PrunedAuction auction, PrunedBid bid) { + return new JoinOutput(auction.seller, auction.expires, auction.dateTime, bid.price, bid.dateTime); + } + }) + .filter(i -> i.auctionDateTime < i.bidDateTime && i.bidDateTime < i.auctionExpires) + .keyBy(i -> i.auctionSeller) + .countWindow(countSize, countSlide) + .apply(new WindowFunction() { + @Override + public void apply(Long seller, GlobalWindow globalWindow, Iterable iterable, Collector collector) throws Exception { + long sum = 0; + long count = 0; + for (JoinOutput i : iterable) { + sum += i.bidPrice; + count++; + } + collector.collect(new Output(seller, sum / count)); + } + }) + .addSink(new DataSink()) ; + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q7.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q7.java new file mode 100644 index 0000000..098e05c --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q7.java @@ -0,0 +1,103 @@ +package org.example.queries; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.windowing.WindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.api.windowing.windows.TimeWindow; +import org.apache.flink.util.Collector; +import org.example.data.Bid; +import org.example.io.DataSink; + +import java.util.Optional; + +public class Q7 { + @JsonPropertyOrder({"auction", "price", "bidder"}) + public static class Output { + public long auction; + public long price; + public long bidder; + + public Output(long auction, long price, long bidder) { + this.auction = auction; + this.price = price; + this.bidder = bidder; + } + + public Output() { + } + } + + public static class PrunedBid { + public long auction; + public long price; + public long bidder; + + public PrunedBid(long auction, long price, long bidder) { + this.auction = auction; + this.price = price; + this.bidder = bidder; + } + + public PrunedBid() { + } + } + + static Time size = Time.seconds(10); + + public static void run(DataStream bids) { + bids.keyBy(b -> b.auction) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction() { + @Override + public void apply( + Long auction, + TimeWindow timeWindow, + Iterable iterable, + Collector collector + ) throws Exception { + long max = Long.MIN_VALUE; + Optional maxBid = Optional.empty(); + for (Bid b : iterable) { + if (b.price > max) { + max = b.price; + maxBid = Optional.of(b); + } + } + assert maxBid.isPresent(); + Bid bid = maxBid.get(); + collector.collect(new Output(auction, bid.price, bid.bidder)); + } + }) + .addSink(new DataSink()); + } + + public static void runOpt(DataStream bids) { + DataStream prunedBids = bids.map(b -> new PrunedBid(b.auction, b.price, b.bidder)); + prunedBids.keyBy(b -> b.auction) + .window(TumblingEventTimeWindows.of(size)) + .apply(new WindowFunction() { + @Override + public void apply( + Long auction, + TimeWindow timeWindow, + Iterable iterable, + Collector collector + ) throws Exception { + long max = Long.MIN_VALUE; + Optional maxBid = Optional.empty(); + for (PrunedBid b : iterable) { + if (b.price > max) { + max = b.price; + maxBid = Optional.of(b); + } + } + assert maxBid.isPresent(); + PrunedBid bid = maxBid.get(); + collector.collect(new Output(auction, bid.price, bid.bidder)); + } + }) + .addSink(new DataSink()); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q8.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q8.java new file mode 100644 index 0000000..4461761 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/Q8.java @@ -0,0 +1,88 @@ +package org.example.queries; + +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.co.ProcessJoinFunction; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.util.Collector; +import org.example.data.Auction; +import org.example.data.Person; +import org.example.io.DataSink; + +public class Q8 { + @JsonPropertyOrder({"person", "name", "reserve"}) + public static class Output { + public long person; + public String name; + public long reserve; + + public Output(long person, String name, long reserve) { + this.person = person; + this.name = name; + this.reserve = reserve; + } + + public Output() { + } + } + + public static class PrunedAuction { + public long seller; + public long reserve; + + public PrunedAuction(long seller, long reserve) { + this.seller = seller; + this.reserve = reserve; + } + + public PrunedAuction() { + } + } + + public static class PrunedPerson { + public long id; + public String name; + + public PrunedPerson(long id, String name) { + this.id = id; + this.name = name; + } + + public PrunedPerson() { + } + } + + static Time lowerBound = Time.minutes(0); + static Time upperBound = Time.minutes(1); + + public static void run(DataStream auctions, DataStream persons) { + persons.keyBy(p -> p.id) + .intervalJoin(auctions.keyBy(a -> a.seller)) + .between(lowerBound, upperBound) + .process(new ProcessJoinFunction() { + @Override + public void processElement(Person person, Auction auction, ProcessJoinFunction.Context context, Collector collector) throws Exception { + collector.collect(new Output(person.id, person.name, auction.reserve)); + } + }) + .returns(Output.class) + .addSink(new DataSink()); + } + + public static void runOpt(DataStream auctions, DataStream persons) { + DataStream prunedPersons = persons.map(p -> new PrunedPerson(p.id, p.name)); + DataStream prunedAuctions = auctions.map(a -> new PrunedAuction(a.seller, a.reserve)); + prunedPersons.keyBy(p -> p.id) + .intervalJoin(prunedAuctions.keyBy(a -> a.seller)) + .between(lowerBound, upperBound) + .upperBoundExclusive() + .process(new ProcessJoinFunction() { + @Override + public void processElement(PrunedPerson person, PrunedAuction auction, ProcessJoinFunction.Context context, Collector collector) throws Exception { + collector.collect(new Output(person.id, person.name, auction.reserve)); + } + }) + .returns(Output.class) + .addSink(new DataSink()); + } +} diff --git a/experiments/nexmark/queries/flink/src/main/java/org/example/queries/QW.java b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/QW.java new file mode 100644 index 0000000..7254b39 --- /dev/null +++ b/experiments/nexmark/queries/flink/src/main/java/org/example/queries/QW.java @@ -0,0 +1,133 @@ +package org.example.queries; + +import org.apache.flink.api.common.functions.AggregateFunction; +import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.functions.windowing.AllWindowFunction; +import org.apache.flink.streaming.api.windowing.assigners.GlobalWindows; +import org.apache.flink.streaming.api.windowing.evictors.CountEvictor; +import org.apache.flink.streaming.api.windowing.triggers.CountTrigger; +import org.apache.flink.streaming.api.windowing.windows.GlobalWindow; +import org.apache.flink.util.Collector; +import org.example.data.Bid; +import org.example.io.DataSink; + +public class QW { + @JsonPropertyOrder({"person", "name", "reserve"}) + public static class Output { + public float mean; + public long min; + public long max; + public float stddev; + + public Output(float mean, long min, long max, float stddev) { + this.mean = mean; + this.min = min; + this.max = max; + this.stddev = stddev; + } + + public Output() { + } + } + + public static void run(DataStream bids, long size, long slide) { + bids.windowAll(GlobalWindows.create()) + .evictor(CountEvictor.of(size)) + .trigger(CountTrigger.of(slide)) + .apply(new AllWindowFunction() { + @Override + public void apply( + GlobalWindow window, + Iterable iterable, + Collector collector + ) throws Exception { + long sum = 0; + long count = 0; + long min = Long.MAX_VALUE; + long max = Long.MIN_VALUE; + for (Bid b : iterable) { + sum += b.price; + count++; + if (b.price < min) { + min = b.price; + } + if (b.price > max) { + max = b.price; + } + } + float mean = (float) sum / count; + float sum_squared_diffs = 0; + for (Bid b : iterable) { + sum_squared_diffs += (b.price - mean) * (b.price - mean); + } + float stddev = (float) Math.sqrt(sum_squared_diffs / count); + collector.collect(new Output(mean, min, max, stddev)); + } + }) + .addSink(new DataSink()); + } + + public static void runOpt(DataStream bids, long size, long slide) { + bids.windowAll(GlobalWindows.create()) + .evictor(CountEvictor.of(size)) + .trigger(CountTrigger.of(slide)) + .aggregate(new Aggregator()) + .addSink(new DataSink()); + } + + public static class Aggregator implements AggregateFunction { + + public long sum; + public long count; + public long min; + public long max; + public long sumSquares; + + public Aggregator(long sum, long count, long min, long max, long sumSquares) { + this.sum = sum; + this.count = count; + this.min = min; + this.max = max; + this.sumSquares = sumSquares; + } + + public Aggregator() { + } + + @Override + public Aggregator createAccumulator() { + return new Aggregator(0, 0, Long.MAX_VALUE, Long.MIN_VALUE, 0); + } + + @Override + public Aggregator add(Bid bid, Aggregator partial) { + return new Aggregator( + partial.sum + bid.price, + partial.count + 1, + Math.min(partial.min, bid.price), + Math.max(partial.max, bid.price), + partial.sumSquares + bid.price * bid.price + ); + } + + @Override + public Output getResult(Aggregator partial) { + float mean = (float) partial.sum / partial.count; + float variance = (float) partial.sumSquares / partial.count - mean * mean; + return new Output(mean, partial.min, partial.max, (float) Math.sqrt(variance)); + } + + @Override + public Aggregator merge(Aggregator partial, Aggregator acc1) { + return new Aggregator( + partial.sum + acc1.sum, + partial.count + acc1.count, + Math.min(partial.min, acc1.min), + Math.max(partial.max, acc1.max), + partial.sumSquares + acc1.sumSquares + ); + } + } + +} diff --git a/experiments/nexmark/queries/shark/Cargo.lock b/experiments/nexmark/queries/shark/Cargo.lock new file mode 100644 index 0000000..16e4d3e --- /dev/null +++ b/experiments/nexmark/queries/shark/Cargo.lock @@ -0,0 +1,1049 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "btree-slab" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c" +dependencies = [ + "cc-traits", + "slab", + "smallvec", +] + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cc-traits" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5" +dependencies = [ + "slab", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "halfbrown" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5681137554ddff44396e5f149892c769d45301dd9aa19c51602a89ee214cb0ec" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hermit-abi" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "macros" +version = "0.0.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "nexmark" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45fc401175963954a7046238c51799a99eaa4d8be7dd7a0c52dbf00813e52f92" +dependencies = [ + "lazy_static", + "rand", + "serde", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags", +] + +[[package]] +name = "runtime" +version = "0.0.0" +dependencies = [ + "arrayvec", + "atoi", + "btree-slab", + "csv-core", + "derive_more", + "futures", + "halfbrown", + "itoa", + "lexical-parse-float", + "macros", + "num", + "rustc-hash", + "ryu", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "smol_str", + "tikv-jemallocator", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shark-nexmark" +version = "0.0.0" +dependencies = [ + "csv", + "memmap2", + "nexmark", + "runtime", + "smartstring", + "smol_str", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "smol_str" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6845563ada680337a52d43bb0b29f396f2d911616f6573012645b9e3d048a49" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "futures-util", + "hashbrown 0.14.3", + "pin-project-lite", + "slab", + "tokio", + "tracing", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] diff --git a/experiments/nexmark/queries/shark/Cargo.toml b/experiments/nexmark/queries/shark/Cargo.toml new file mode 100644 index 0000000..3f72a81 --- /dev/null +++ b/experiments/nexmark/queries/shark/Cargo.toml @@ -0,0 +1,19 @@ +[workspace] + +[package] +name = "shark-nexmark" +version = "0.0.0" +edition = "2021" + +[dependencies] +nexmark = { version = "0.2.0", features = ["serde"] } +runtime = { path = "../../../../crates/runtime" } +memmap2 = "0.9.0" +smartstring = "1.0.1" +csv = "1.3.0" +smol_str = "0.2.0" + +[profile.release] +lto = "fat" +codegen-units = 1 +panic = "abort" diff --git a/experiments/nexmark/queries/shark/src/data.rs b/experiments/nexmark/queries/shark/src/data.rs new file mode 100644 index 0000000..cf5f413 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/data.rs @@ -0,0 +1,41 @@ +use runtime::prelude::*; + +#[data] +pub struct Auction { + pub id: u64, + pub item_name: String, + pub description: String, + pub initial_bid: u64, + pub reserve: u64, + #[timestamp] + pub date_time: u64, + pub expires: u64, + pub seller: u64, + pub category: u64, + pub extra: String, +} + +#[data] +pub struct Person { + pub id: u64, + pub name: String, + pub email_address: String, + pub credit_card: String, + pub city: String, + pub state: String, + #[timestamp] + pub date_time: u64, + pub extra: String, +} + +#[data] +pub struct Bid { + pub auction: u64, + pub bidder: u64, + pub price: u64, + pub channel: String, + pub url: String, + #[timestamp] + pub date_time: u64, + pub extra: String, +} diff --git a/experiments/nexmark/queries/shark/src/main.rs b/experiments/nexmark/queries/shark/src/main.rs new file mode 100644 index 0000000..8e46e94 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/main.rs @@ -0,0 +1,137 @@ +pub mod data; + +pub mod q1; +pub mod q2; +pub mod q3; +pub mod q4; +pub mod q5; +pub mod q6; +pub mod q7; +pub mod q8; +pub mod qw; + +use std::fs::File; +use std::io::BufRead; + +use runtime::prelude::formats::csv; +use runtime::prelude::*; +use runtime::traits::Timestamp; + +use crate::data::Auction; +use crate::data::Bid; +use crate::data::Person; + +const WATERMARK_FREQUENCY: usize = 1000; +const SLACK: Duration = Duration::from_milliseconds(100); + +fn main() { + let mut args = std::env::args().skip(1); + let dir = args.next().expect("No `dir` specified"); + let query = args.next().expect("No `query` specified"); + + let bids = std::fs::File::open(&format!("{dir}/bids.csv")).map(iter::); + let auctions = std::fs::File::open(&format!("{dir}/auctions.csv")).map(iter::); + let persons = std::fs::File::open(&format!("{dir}/persons.csv")).map(iter::); + + fn timed(f: impl FnOnce(&mut Context) + Send + 'static) { + let time = std::time::Instant::now(); + CurrentThreadRunner::run(f); + eprintln!("{}", time.elapsed().as_millis()); + } + + match query.as_str() { + // Un-optimised + "q1" => timed(move |ctx| q1::run(stream(ctx, bids), ctx)), + "q2" => timed(move |ctx| q2::run(stream(ctx, bids), ctx)), + "q3" => timed(move |ctx| q3::run(stream(ctx, auctions), stream(ctx, persons), ctx)), + "q4" => timed(move |ctx| q4::run(stream(ctx, auctions), stream(ctx, bids), ctx)), + "q5" => timed(move |ctx| q5::run(stream(ctx, bids), ctx)), + "q6" => timed(move |ctx| q6::run(stream(ctx, auctions), stream(ctx, bids), ctx)), + "q7" => timed(move |ctx| q7::run(stream(ctx, bids), ctx)), + "q8" => timed(move |ctx| q8::run(stream(ctx, auctions), stream(ctx, persons), ctx)), + "qw" => { + let size = args.next().unwrap().parse().unwrap(); + let step = args.next().unwrap().parse().unwrap(); + timed(move |ctx| qw::run(stream(ctx, bids), size, step, ctx)) + } + // Optimised + "q1-opt" => timed(move |ctx| q1::run_opt(stream(ctx, bids), ctx)), + "q2-opt" => timed(move |ctx| q2::run_opt(stream(ctx, bids), ctx)), + "q3-opt" => timed(move |ctx| q3::run_opt(stream(ctx, auctions), stream(ctx, persons), ctx)), + "q4-opt" => timed(move |ctx| q4::run_opt(stream(ctx, auctions), stream(ctx, bids), ctx)), + "q5-opt" => timed(move |ctx| q5::run_opt(stream(ctx, bids), ctx)), + "q6-opt" => timed(move |ctx| q6::run_opt(stream(ctx, auctions), stream(ctx, bids), ctx)), + "q7-opt" => timed(move |ctx| q7::run_opt(stream(ctx, bids), ctx)), + "q8-opt" => timed(move |ctx| q8::run_opt(stream(ctx, auctions), stream(ctx, persons), ctx)), + "qw-opt" => { + let size = args.next().unwrap().parse().unwrap(); + let step = args.next().unwrap().parse().unwrap(); + timed(move |ctx| qw::run_opt(stream(ctx, bids), size, step, ctx)) + } + "io" => { + timed(move |ctx| { + if bids.is_ok() { + stream(ctx, bids).drain(ctx); + } + if persons.is_ok() { + stream(ctx, persons).drain(ctx); + } + if auctions.is_ok() { + stream(ctx, auctions).drain(ctx); + } + }); + } + _ => panic!("unknown query"), + } +} + +// Memory-mapped CSV reader +#[allow(unused)] +fn iter_mmap(file: File) -> impl Iterator { + let mmap = unsafe { + memmap2::MmapOptions::new() + .map(&file) + .expect("Unable to map file") + }; + mmap.advise(memmap2::Advice::Sequential).unwrap(); + let mut reader = csv::de::Reader::<1024>::new(','); + let mut i = 0; + std::iter::from_fn(move || { + if i >= mmap.len() { + return None; + } + let mut deserializer = csv::de::Deserializer::new(&mut reader, &mmap[i..]); + let bid = T::deserialize(&mut deserializer).unwrap(); + i += deserializer.nread; + Some(bid) + }) +} + +// Buffered CSV reader +fn iter(file: File) -> impl Iterator { + let mut bufreader = std::io::BufReader::new(file); + let mut buf = std::vec::Vec::new(); + let mut reader = csv::de::Reader::<1024>::new(','); + std::iter::from_fn(move || match bufreader.read_until(b'\n', &mut buf) { + Ok(0) => None, + Ok(n) => { + let mut de = csv::de::Deserializer::new(&mut reader, &buf[0..n]); + match T::deserialize(&mut de) { + Ok(data) => { + buf.clear(); + Some(data) + } + Err(e) => panic!("Failed to deserialize: {}", e), + } + } + Err(e) => panic!("Failed to read from stdin: {}", e), + }) +} + +// Stream from iterator +fn stream( + ctx: &mut Context, + iter: std::io::Result + Send + 'static>, +) -> Stream { + Stream::from_iter(ctx, iter.unwrap(), T::timestamp, WATERMARK_FREQUENCY, SLACK) +} diff --git a/experiments/nexmark/queries/shark/src/q1.rs b/experiments/nexmark/queries/shark/src/q1.rs new file mode 100644 index 0000000..fd51275 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q1.rs @@ -0,0 +1,25 @@ +use runtime::prelude::*; + +use crate::data::Bid; + +#[data] +struct Output { + auction: u64, + price: u64, + bidder: u64, + date_time: u64, +} + +pub fn run(bids: Stream, ctx: &mut Context) { + bids.map(ctx, |bid| { + Output::new(bid.auction, bid.price * 100 / 85, bid.bidder, bid.date_time) + }) + .drain(ctx); +} + +pub fn run_opt(bids: Stream, ctx: &mut Context) { + bids.map(ctx, |bid| { + Output::new(bid.auction, bid.price * 100 / 85, bid.bidder, bid.date_time) + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q2.rs b/experiments/nexmark/queries/shark/src/q2.rs new file mode 100644 index 0000000..007bc41 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q2.rs @@ -0,0 +1,39 @@ +use runtime::prelude::*; + +use crate::data::Bid; + +#[data] +struct Output { + auction: u64, + price: u64, +} + +pub fn run(bids: Stream, ctx: &mut Context) { + bids.filter(ctx, |bid| { + bid.auction == 1007 + || bid.auction == 1020 + || bid.auction == 2001 + || bid.auction == 2019 + || bid.auction == 2087 + }) + .map(ctx, |bid| Output::new(bid.auction, bid.price)) + .drain(ctx); +} + +// Opt: +// * Fusion +pub fn run_opt(bids: Stream, ctx: &mut Context) { + bids.filter_map(ctx, |bid| { + if bid.auction == 1007 + || bid.auction == 1020 + || bid.auction == 2001 + || bid.auction == 2019 + || bid.auction == 2087 + { + Option::Some(Output::new(bid.auction, bid.price)) + } else { + Option::None + } + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q3.rs b/experiments/nexmark/queries/shark/src/q3.rs new file mode 100644 index 0000000..d50b9fe --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q3.rs @@ -0,0 +1,79 @@ +use runtime::prelude::*; + +use crate::data::Auction; +use crate::data::Person; + +#[data] +struct Output { + name: String, + city: String, + state: String, + id: u64, +} + +#[data] +struct PrunedAuction { + id: u64, + seller: u64, +} + +#[data] +struct PrunedPerson { + id: u64, + name: String, + city: String, + state: String, +} + +const SIZE: Duration = Duration::from_seconds(10); + +pub fn run(auctions: Stream, persons: Stream, ctx: &mut Context) { + auctions + .tumbling_window_join( + ctx, + persons, + |auction| auction.seller, + |person| person.id, + SIZE, + |auction, person| (auction.clone(), person.clone()), + ) + .filter(ctx, |(auction, person)| { + (person.state == "or" || person.state == "id" || person.state == "ca") + && auction.category == 10 + }) + .map(ctx, |(auction, person)| { + Output::new(person.name, person.city, person.state, auction.id) + }) + .drain(ctx); +} + +// Opts: +// * Data pruning +// * Predicate pushdown +// * Operator fusion +pub fn run_opt(auctions: Stream, persons: Stream, ctx: &mut Context) { + let persons2 = persons.filter_map(ctx, |p| { + if p.state == "or" || p.state == "id" || p.state == "ca" { + Option::Some(PrunedPerson::new(p.id, p.name, p.city, p.state)) + } else { + Option::None + } + }); + let auctions2 = auctions.filter_map(ctx, |a| { + if a.category == 10 { + Option::Some(PrunedAuction::new(a.id, a.seller)) + } else { + Option::None + } + }); + auctions2 + .tumbling_window_join( + ctx, + persons2, + |a| a.seller, + |p| p.id, + SIZE, + |a, p| Output::new(p.name.clone(), p.city.clone(), p.state.clone(), a.id), + ) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q4.rs b/experiments/nexmark/queries/shark/src/q4.rs new file mode 100644 index 0000000..be19c76 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q4.rs @@ -0,0 +1,88 @@ +use runtime::prelude::*; + +use crate::data::Auction; +use crate::data::Bid; + +#[data] +struct Output { + category: u64, + avg_price: u64, +} + +#[data] +struct PrunedAuction { + id: u64, + category: u64, + expires: u64, + date_time: u64, +} + +#[data] +struct PrunedBid { + auction: u64, + price: u64, + date_time: u64, +} + +const SIZE: Duration = Duration::from_seconds(10); + +pub fn run(auctions: Stream, bids: Stream, ctx: &mut Context) { + auctions + .tumbling_window_join( + ctx, + bids, + |auction| auction.id, + |bid| bid.auction, + SIZE, + |auction, bid| (auction.clone(), bid.clone()), + ) + .filter(ctx, |(a, b)| { + a.date_time <= b.date_time && b.date_time <= a.expires + }) + .keyby(ctx, |(a, _)| (a.id, a.category)) + .time_tumbling_holistic_window(ctx, SIZE, |(_, category), items, _| { + let max = items.iter().map(|(_, b)| b.price).max().unwrap(); + (*category, max) + }) + .keyby(ctx, |(_, category)| *category) + .time_tumbling_holistic_window(ctx, SIZE, |category, items, _| { + let sum = items.iter().map(|(_, max)| max).sum::(); + let count = items.len() as u64; + Output::new(*category, sum / count) + }) + .drain(ctx); +} + +// Opts: +// * Data pruning +pub fn run_opt(auctions: Stream, bids: Stream, ctx: &mut Context) { + let auctions = auctions.map(ctx, |a| { + PrunedAuction::new(a.id, a.category, a.expires, a.date_time) + }); + let bids = bids.map(ctx, |b| PrunedBid::new(b.auction, b.price, b.date_time)); + + auctions + .tumbling_window_join( + ctx, + bids, + |auction| auction.id, + |bid| bid.auction, + SIZE, + |auction, bid| (auction.clone(), bid.clone()), + ) + .filter(ctx, |(a, b)| { + a.date_time <= b.date_time && b.date_time <= a.expires + }) + .keyby(ctx, |(a, _)| (a.id, a.category)) + .time_tumbling_holistic_window(ctx, SIZE, |(_, category), items, _| { + let max = items.iter().map(|(_, b)| b.price).max().unwrap(); + (*category, max) + }) + .keyby(ctx, |(_, category)| *category) + .time_tumbling_holistic_window(ctx, SIZE, |category, items, _| { + let sum = items.iter().map(|(_, max)| max).sum::(); + let count = items.len() as u64; + Output::new(*category, sum / count) + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q5.rs b/experiments/nexmark/queries/shark/src/q5.rs new file mode 100644 index 0000000..9bdbc53 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q5.rs @@ -0,0 +1,46 @@ +use runtime::prelude::*; + +use crate::data::Bid; + +#[data] +struct Output { + auction: u64, +} + +#[data] +struct PrunedBid { + auction: u64, + bidder: u64, +} + +const SIZE: Duration = Duration::from_minutes(5); +const SLIDE: Duration = Duration::from_minutes(1); + +pub fn run(bids: Stream, ctx: &mut Context) { + bids.keyby(ctx, |b| b.auction) + .time_sliding_aligned_holistic_window(ctx, SIZE, SLIDE, |auction, bids, _| { + (*auction, bids.into_iter().count()) + }) + .unkey(ctx) + .time_sliding_aligned_holistic_window(ctx, SIZE, SLIDE, |items, _| { + let auction = items.iter().max_by_key(|(_, a)| a).unwrap().0; + Output::new(auction) + }) + .drain(ctx); +} + +// Opts: +// * Data pruning +pub fn run_opt(bids: Stream, ctx: &mut Context) { + let bids = bids.map(ctx, |b| PrunedBid::new(b.auction, b.bidder)); + bids.keyby(ctx, |b| b.auction) + .time_sliding_aligned_holistic_window(ctx, SIZE, SLIDE, |auction, bids, _| { + (*auction, bids.into_iter().count()) + }) + .unkey(ctx) + .time_sliding_aligned_holistic_window(ctx, SIZE, SLIDE, |items, _| { + let auction = items.iter().max_by_key(|(_, a)| a).unwrap().0; + Output::new(auction) + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q6.rs b/experiments/nexmark/queries/shark/src/q6.rs new file mode 100644 index 0000000..4408ace --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q6.rs @@ -0,0 +1,89 @@ +use runtime::prelude::*; + +use crate::data::Auction; +use crate::data::Bid; + +#[data] +struct Output { + seller: u64, + avg_bid_price: u64, +} + +#[data] +struct JoinOutput { + auction_seller: u64, + auction_expires: u64, + auction_date_time: u64, + bid_price: u64, + bid_date_time: u64, +} + +#[data] +struct PrunedAuction { + id: u64, + seller: u64, + expires: u64, + date_time: u64, +} + +#[data] +struct PrunedBid { + auction: u64, + price: u64, + date_time: u64, +} + +const TIME_SIZE: Duration = Duration::from_seconds(10); + +const COUNT_SIZE: usize = 10; +const COUNT_SLIDE: usize = 1; + +pub fn run(auctions: Stream, bids: Stream, ctx: &mut Context) { + auctions + .tumbling_window_join( + ctx, + bids, + |a| a.id, + |b| b.auction, + TIME_SIZE, + |a, b| JoinOutput::new(a.seller, a.expires, a.date_time, b.price, b.date_time), + ) + .filter(ctx, |i| { + i.auction_date_time < i.bid_date_time && i.bid_date_time < i.auction_expires + }) + .keyby(ctx, |v| v.auction_seller) + .count_sliding_holistic_window(ctx, COUNT_SIZE, COUNT_SLIDE, |seller, data| { + let sum = data.iter().map(|v| v.bid_price).sum::(); + let count = data.len() as u64; + Output::new(*seller, sum / count) + }) + .drain(ctx); +} + +// Opts: +// * Data pruning +pub fn run_opt(auctions: Stream, bids: Stream, ctx: &mut Context) { + let auctions = auctions.map(ctx, |a| { + PrunedAuction::new(a.id, a.seller, a.expires, a.date_time) + }); + let bids = bids.map(ctx, |b| PrunedBid::new(b.auction, b.price, b.date_time)); + auctions + .tumbling_window_join( + ctx, + bids, + |a| a.id, + |b| b.auction, + TIME_SIZE, + |a, b| JoinOutput::new(a.seller, a.expires, a.date_time, b.price, b.date_time), + ) + .filter(ctx, |i| { + i.auction_date_time < i.bid_date_time && i.bid_date_time < i.auction_expires + }) + .keyby(ctx, |v| v.auction_seller) + .count_sliding_holistic_window(ctx, COUNT_SIZE, COUNT_SLIDE, |seller, data| { + let sum = data.iter().map(|v| v.bid_price).sum::(); + let count = data.len() as u64; + Output::new(*seller, sum / count) + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q7.rs b/experiments/nexmark/queries/shark/src/q7.rs new file mode 100644 index 0000000..4b742b3 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q7.rs @@ -0,0 +1,40 @@ +use runtime::prelude::*; + +use crate::data::Bid; + +#[data] +struct Output { + auction: u64, + price: u64, + bidder: u64, +} + +#[data] +struct PrunedBid { + auction: u64, + price: u64, + bidder: u64, +} + +const SIZE: Duration = Duration::from_seconds(10); + +pub fn run(bids: Stream, ctx: &mut Context) { + bids.keyby(ctx, |b| b.auction) + .time_tumbling_holistic_window(ctx, SIZE, |auction, bids, _| { + let bid = bids.iter().max_by_key(|b| b.price).unwrap(); + Output::new(*auction, bid.price, bid.bidder) + }) + .drain(ctx); +} + +// Opts: +// * Data pruning +pub fn run_opt(bids: Stream, ctx: &mut Context) { + let bids = bids.map(ctx, |b| PrunedBid::new(b.auction, b.price, b.bidder)); + bids.keyby(ctx, |b| b.auction) + .time_tumbling_holistic_window(ctx, SIZE, |auction, bids, _| { + let bid = bids.iter().max_by_key(|b| b.price).unwrap(); + Output::new(*auction, bid.price, bid.bidder) + }) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/q8.rs b/experiments/nexmark/queries/shark/src/q8.rs new file mode 100644 index 0000000..ef31477 --- /dev/null +++ b/experiments/nexmark/queries/shark/src/q8.rs @@ -0,0 +1,58 @@ +use runtime::prelude::*; + +use crate::data::Auction; +use crate::data::Person; + +#[data] +struct Output { + person: u64, + name: String, + reserve: u64, +} + +#[data] +struct PrunedAuction { + seller: u64, + reserve: u64, +} + +#[data] +struct PrunedPerson { + id: u64, + name: String, +} + +const LOWER_BOUND: Duration = Duration::from_minutes(0); +const UPPER_BOUND: Duration = Duration::from_minutes(1); + +pub fn run(auctions: Stream, persons: Stream, ctx: &mut Context) { + persons + .interval_join( + ctx, + auctions, + |p| p.id, + |a| a.seller, + LOWER_BOUND, + UPPER_BOUND, + |p, a| Output::new(p.id, p.name.clone(), a.reserve), + ) + .drain(ctx); +} + +// Opts: +// * Data pruning +// * Interval join => interval join forward +pub fn run_opt(auctions: Stream, persons: Stream, ctx: &mut Context) { + let auctions = auctions.map(ctx, |a| PrunedAuction::new(a.seller, a.reserve)); + let persons = persons.map(ctx, |p| PrunedPerson::new(p.id, p.name)); + persons + .interval_join_forward( + ctx, + auctions, + |p| p.id, + |a| a.seller, + UPPER_BOUND, + |p, a| Output::new(p.id, p.name.clone(), a.reserve), + ) + .drain(ctx); +} diff --git a/experiments/nexmark/queries/shark/src/qw.rs b/experiments/nexmark/queries/shark/src/qw.rs new file mode 100644 index 0000000..cdafbee --- /dev/null +++ b/experiments/nexmark/queries/shark/src/qw.rs @@ -0,0 +1,86 @@ +use runtime::prelude::*; + +use crate::data::Bid; + +#[data] +pub struct Output { + pub mean: f64, + pub stddev: f64, + pub min: u64, + pub max: u64, +} + +#[data] +pub struct Partial { + pub sum: u64, + pub count: u64, + pub max: u64, + pub min: u64, + pub sum_sq: u64, +} + +impl Partial { + pub fn identity() -> Self { + Self::new(0, 0, u64::MIN, u64::MAX, 0) + } + + pub fn lift(bid: &Bid) -> Self { + Self::new(bid.price, 1, bid.price, bid.price, bid.price.pow(2)) + } + + pub fn combine(&self, other: &Self) -> Self { + Self::new( + self.sum + other.sum, + self.count + other.count, + self.max.max(other.max), + self.min.min(other.min), + self.sum_sq + other.sum_sq, + ) + } + + pub fn lower(&self) -> Output { + let mean = self.sum as f64 / self.count as f64; + let variance = (self.sum_sq as f64 / self.count as f64) - (mean * mean); + let stddev = variance.sqrt(); + Output::new(mean, stddev, self.max, self.min) + } +} + +pub fn run(bids: Stream, size: usize, step: usize, ctx: &mut Context) { + bids.count_sliding_holistic_window(ctx, size, step, |data| { + let mut sum = 0; + let mut count = 0; + let mut min = u64::MAX; + let mut max = u64::MIN; + for bid in data.iter() { + sum += bid.price; + count += 1; + min = min.min(bid.price); + max = max.max(bid.price); + } + let mean = sum as f64 / count as f64; + + let mut sum_sq_diff = 0.0; + for bid in data.iter() { + let diff = bid.price as f64 - mean; + sum_sq_diff += diff * diff; + } + let variance = sum_sq_diff / count as f64; + let stddev = variance.sqrt(); + Output::new(mean, stddev, max, min) + }) + .drain(ctx); +} + +pub fn run_opt(bids: Stream, size: usize, step: usize, ctx: &mut Context) { + bids.count_sliding_aligned_commutative_associative_window( + ctx, + size, + step, + Partial::identity(), + Partial::lift, + Partial::combine, + Partial::lower, + ) + .drain(ctx); +} diff --git a/experiments/nexmark/run.py b/experiments/nexmark/run.py new file mode 100644 index 0000000..b0a10e1 --- /dev/null +++ b/experiments/nexmark/run.py @@ -0,0 +1,334 @@ +import subprocess +import numpy as np +import os +import json +import matplotlib.pyplot as plt +import sys +import glob +from matplotlib.patches import Patch +from matplotlib.ticker import FormatStrFormatter + + +num_events = 5_000_000 +num_warmups = 5 +num_iterations = 10 + +flink = ['flink', 'run', 'queries/flink/target/flink-nexmark-1.0-SNAPSHOT.jar'] +shark = ['./queries/shark/target/release/shark-nexmark'] + + +def json_path(n): + return f'output/experiment{n}-results.json' + + +def pdf_path(n, io=False): + if io: + return f'output/experiment{n}-io-plot.pdf' + else: + return f'output/experiment{n}-plot.pdf' + + +def setup(): + if not os.path.exists('data'): + os.mkdir('data') + + if os.path.exists('output'): + for f in glob.glob('output/*'): + os.remove(f) + else: + os.mkdir('output') + + # Start Flink cluster if not running + p = subprocess.run(['jps'], capture_output=True) + if 'TaskManager' not in p.stdout.decode('utf-8'): + print('Starting Flink Cluster') + subprocess.run(['start-cluster.sh'], check=True) + # Ensure that the taskmanager has the correct configuration + print('Configuring TaskManager') + subprocess.run(['taskmanager.sh', 'stop'], check=True) + subprocess.run(['taskmanager.sh', 'start'], check=True) + else: + print('Flink Cluster already online') + + # Build Rust project + subprocess.run(['cargo', 'build', '--release', + '--manifest-path=queries/shark/Cargo.toml']) + + # Build Java project + subprocess.run(['mvn', 'clean', 'package', '-f', 'queries/flink/pom.xml']) + + # Build Data Generator + subprocess.run(['cargo', 'build', '--release', + '--manifest-path=data-generator/Cargo.toml']) + + +def generate(s, n=num_events): + b = 'b' in s + a = 'a' in s + p = 'p' in s + path = f'data/data-n{n}-{s}/' + if not os.path.exists(path): + cmd = ['./data-generator/target/release/data-generator', + '--num-events=' + str(n), + '--dir=' + path] + if b: + cmd.append('--bids') + if a: + cmd.append('--auctions') + if p: + cmd.append('--persons') + print(f'Generating data: {" ".join(cmd)} ') + subprocess.run(cmd, check=True) + return path + +# Run experiments + + +io_cache = {} + + +def measure_query(program, query, data, extra_args=[]): + y, yerr = measure(program, query, data, extra_args) + y_io, yerr_io = measure_io(program, data) + print(f'Execution time: {y} ± {yerr} (I/O: {y_io} ± {yerr_io})') + return y, yerr, y_io, yerr_io + + +def measure_io(program, data): + if (tuple(program), data) in io_cache: + print(f'IO Cache hit {" ".join(program)} {data}') + return io_cache[(tuple(program), data)] + else: + y, yerr = measure(program, 'io', data) + io_cache[(tuple(program), data)] = (y, yerr) + return y, yerr + + +def measure(program, query, data, extra_args=[]): + execution_times = [] + cmd = program + [data, query] + extra_args + print(f'Measuring: {" ".join(cmd)}') + for iteration in range(num_iterations + num_warmups): + if iteration == num_warmups and num_warmups > 0: + print('Warmup done, starting measurements') + output = subprocess.run( + cmd, + capture_output=True, + text=True).stderr + seconds = int(output) / 1000 + if iteration >= num_warmups: + execution_times.append(seconds) + print(f'Iteration {iteration+1}/{num_iterations + num_warmups} ' + f'execution time: {seconds} sec') + y = np.mean(execution_times) + yerr = np.std(execution_times) + return y, yerr + + +def read(path): + with open(path, 'r') as file: + return json.load(file) + + +def write(path, obj): + with open(path, 'w') as file: + file.write(json.dumps(obj, indent=4)) + + +def run_experiment1(): + def f(program, query, data): + return measure_query(program, query, data) + obj = { + 'Q1': { + 'Flink': f(flink, 'q1', generate('b')), + 'Shark': f(shark, 'q1', generate('b')) + }, + 'Q2': { + 'Flink': f(flink, 'q2', generate('b')), + 'Shark': f(shark, 'q2', generate('b')), + }, + 'Q3': { + 'Flink': f(flink, 'q3', generate('ap')), + 'Shark': f(shark, 'q3', generate('ap')), + 'FlinkOpt': f(flink, 'q3-opt', generate('ap')), + 'SharkOpt': f(shark, 'q3-opt', generate('ap')) + }, + 'Q4': { + 'Flink': f(flink, 'q4', generate('ab')), + 'Shark': f(shark, 'q4', generate('ab')), + 'FlinkOpt': f(flink, 'q4-opt', generate('ab')), + 'SharkOpt': f(shark, 'q4-opt', generate('ab')) + }, + 'Q5': { + 'Flink': f(flink, 'q5', generate('b')), + 'Shark': f(shark, 'q5', generate('b')), + 'FlinkOpt': f(flink, 'q5-opt', generate('b')), + 'SharkOpt': f(shark, 'q5-opt', generate('b')) + }, + 'Q6': { + 'Flink': f(flink, 'q6', generate('ab')), + 'Shark': f(shark, 'q6', generate('ab')), + 'FlinkOpt': f(flink, 'q6-opt', generate('ab')), + 'SharkOpt': f(shark, 'q6-opt', generate('ab')) + }, + 'Q7': { + 'Flink': f(flink, 'q7', generate('b')), + 'Shark': f(shark, 'q7', generate('b')), + 'FlinkOpt': f(flink, 'q7-opt', generate('b')), + 'SharkOpt': f(shark, 'q7-opt', generate('b')) + }, + 'Q8': { + 'Flink': f(flink, 'q8', generate('ap')), + 'Shark': f(shark, 'q8', generate('ap')), + 'FlinkOpt': f(flink, 'q8-opt', generate('ap')), + 'SharkOpt': f(shark, 'q8-opt', generate('ap')) + } + } + write(json_path(1), obj) + + +def run_experiment2(): + slide = '100' + data = generate('b') + + def f(program, size, query): + return measure_query(program, query, data, extra_args=[size, slide]) + + obj = { + 'Size 100': { + 'Flink': f(flink, '100', 'qw'), + 'Shark': f(shark, '100', 'qw'), + 'FlinkOpt': f(flink, '100', 'qw-opt'), + 'SharkOpt': f(shark, '100', 'qw-opt'), + }, + 'Size 1000': { + 'Flink': f(flink, '1000', 'qw'), + 'Shark': f(shark, '1000', 'qw'), + 'FlinkOpt': f(flink, '1000', 'qw-opt'), + 'SharkOpt': f(shark, '1000', 'qw-opt'), + }, + 'Size 10000': { + 'Flink': f(flink, '10000', 'qw'), + 'Shark': f(shark, '10000', 'qw'), + 'FlinkOpt': f(flink, '10000', 'qw-opt'), + 'SharkOpt': f(shark, '10000', 'qw-opt'), + }, + 'Size 100000': { + 'Shark': f(shark, '100000', 'qw'), + 'SharkOpt': f(shark, '100000', 'qw-opt'), + } + } + write(json_path(2), obj) + + +def plot(result_json_path, plot_path, tex=False, io=False): + obj = read(result_json_path) + ymax = max([y for query in obj.values() + for y, _, _, _ in query.values()]) + + SMALL_SIZE = 8 + MEDIUM_SIZE = 10 + BIGGER_SIZE = 12 + + plt.rc('font', size=SMALL_SIZE) + plt.rc('axes', titlesize=SMALL_SIZE) + plt.rc('axes', labelsize=MEDIUM_SIZE) + plt.rc('xtick', labelsize=SMALL_SIZE) + plt.rc('ytick', labelsize=SMALL_SIZE) + plt.rc('legend', fontsize=SMALL_SIZE) + plt.rc('figure', titlesize=BIGGER_SIZE) + if tex: + plt.rcParams['text.usetex'] = True + plt.rcParams['pdf.fonttype'] = 42 + plt.rcParams['ps.fonttype'] = 42 + plt.rcParams["font.family"] = "serif" + plt.rcParams["font.size"] = "8" + + fig, ax = plt.subplots(figsize=(10/3, 2.5)) + + ax.yaxis.set_major_formatter(FormatStrFormatter('%.0f')) + ax.set_ylim([0, ymax * 1.1]) + + bar_width = 0.2 + + system_names = ['Flink', 'Shark', 'FlinkOpt', 'SharkOpt'] + + colors = plt.cm.Accent(np.linspace(0, 0.5, len(system_names))) + color_map = dict(zip(system_names, colors)) + hatch_map = dict(zip(system_names, ['/', 'x', '.', 'o'])) + + for query_index, (query, systems) in enumerate(obj.items()): + offset = (len(systems) - 1) * bar_width / 2 + for system_index, (system, metrics) in enumerate(systems.items()): + y, y_err, y_io, y_io_err = metrics + x = query_index - offset + system_index * bar_width + + if not io: + y = y - y_io + + hatch = hatch_map[system] + color = color_map[system] + ax.bar(x, y, bar_width, yerr=y_err, + color=color, + edgecolor='black', + alpha=0.8, + linewidth=0.5, + hatch=hatch) + if io: + ax.bar(x, y_io, bar_width, yerr=y_io_err, + color='lightgray', + edgecolor='black', + linewidth=0.5, + alpha=0.8) + + ax.set_xticks(np.arange(len(obj))) + ax.set_xticklabels(obj.keys()) + + ax.set_ylabel('Execution Time (seconds)') + + handles = [Patch( + label=system, + facecolor=color_map[system], + hatch=hatch_map[system], + edgecolor='black', + linewidth=0.5 + ) for system in system_names] + + if io: + handles.append(Patch(label='I/O', + facecolor='lightgray', + linewidth=0.5, + edgecolor='black')) + + ax.legend(handles=handles, + title='System', + fontsize="7", + handlelength=0.75, + handletextpad=0.5, + loc="upper left") + + plt.tight_layout() + plt.savefig(plot_path, bbox_inches='tight', dpi=1200) + print(f'Plot saved to {plot_path}') + + +def plot_experiment1(tex=False): + plot(json_path(1), pdf_path(1, io=True), tex=tex, io=True) + plot(json_path(1), pdf_path(1, io=False), tex=tex, io=False) + + +def plot_experiment2(twocolumn=False, tex=False): + plot(json_path(2), pdf_path(2, io=False), tex=tex, io=False) + + +if len(sys.argv) > 1 and sys.argv[1] == 'plot': + plot_experiment1(tex=True) + plot_experiment2(tex=True) +else: + setup() + + run_experiment1() + run_experiment2() + + plot_experiment1(tex=False) + plot_experiment2(tex=False) diff --git a/experiments/wasm/guest-js/component.wit b/experiments/wasm/guest-js/component.wit new file mode 100644 index 0000000..a38f744 --- /dev/null +++ b/experiments/wasm/guest-js/component.wit @@ -0,0 +1,6 @@ +package example:component; + +world component { + export print: func(input: string); + export hello: func() -> string; +} diff --git a/experiments/wasm/guest-js/lib.js b/experiments/wasm/guest-js/lib.js new file mode 100644 index 0000000..de4b7b0 --- /dev/null +++ b/experiments/wasm/guest-js/lib.js @@ -0,0 +1,7 @@ +export function print() { + console.log("Hello, world!"); +} + +export function hello() { + return "Hello, world!"; +} diff --git a/experiments/wasm/guest-js/package-lock.json b/experiments/wasm/guest-js/package-lock.json new file mode 100644 index 0000000..b11a3ba --- /dev/null +++ b/experiments/wasm/guest-js/package-lock.json @@ -0,0 +1,701 @@ +{ + "name": "guest-js", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@bytecodealliance/componentize-js": "^0.7.1", + "@bytecodealliance/jco": "^1.0.2" + } + }, + "node_modules/@bytecodealliance/componentize-js": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/componentize-js/-/componentize-js-0.7.1.tgz", + "integrity": "sha512-U7LCzFR7N02YDsjaIwmxUNE9eqGVwORSzNOdz2UNk43kSvku0hHg65jLCvZ3bkVd9vABdfdtyi5sxSkSAr1WQg==", + "dependencies": { + "@bytecodealliance/jco": "^1.0.2", + "@bytecodealliance/wizer": "^3.0.1" + } + }, + "node_modules/@bytecodealliance/jco": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bytecodealliance/jco/-/jco-1.0.2.tgz", + "integrity": "sha512-DAHnX+nW+ppHRkqh7WpTVF8fWD99Ctl8KgJ51rSan2DFu0qJ00hWBHplAokYaW1m81LbjbMom5k24FnvTwKoNA==", + "dependencies": { + "@bytecodealliance/preview2-shim": "0.15.1", + "binaryen": "^111.0.0", + "chalk-template": "^0.4.0", + "commander": "^9.4.1", + "mkdirp": "^1.0.4", + "ora": "^6.1.2", + "terser": "^5.16.1" + }, + "bin": { + "jco": "src/jco.js" + } + }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.15.1.tgz", + "integrity": "sha512-dzdsRvdDTaogMS8rLJhJWtRMMIUwaXcZyxklnsj6o81/PQl5VCPMBqBItRnmbtizTVGPKGxmfRkxZBw86gBkzg==" + }, + "node_modules/@bytecodealliance/wizer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer/-/wizer-3.0.1.tgz", + "integrity": "sha512-f0NBiBHCNBkbFHTPRbA7aKf/t4KyNhi2KvSqw3QzCgi8wFF/uLZ0dhejj93rbiKO/iwWbmU7v9K3SVkW81mcjQ==", + "bin": { + "wizer": "wizer.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@bytecodealliance/wizer-darwin-arm64": "3.0.1", + "@bytecodealliance/wizer-darwin-x64": "3.0.1", + "@bytecodealliance/wizer-linux-arm64": "3.0.1", + "@bytecodealliance/wizer-linux-s390x": "3.0.1", + "@bytecodealliance/wizer-linux-x64": "3.0.1", + "@bytecodealliance/wizer-win32-x64": "3.0.1" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-arm64": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-arm64/-/wizer-darwin-arm64-3.0.1.tgz", + "integrity": "sha512-/8KYSajyhO9koAE3qQhYfC6belZheJw9X3XqW7hrizTpj6n4z4OJFhhqwJmiYFUUsPtC7OxcXMFFPbTuSQPBcw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-x64": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-x64/-/wizer-darwin-x64-3.0.1.tgz", + "integrity": "sha512-bMReultN/r+W/BRXV0F+28U5dZwbQT/ZO0k4icZlhUhrv5/wpQJix7Z/ZvBnVQ+/JHb0QDUpFk2/zCtgkRXP6Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-arm64": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-arm64/-/wizer-linux-arm64-3.0.1.tgz", + "integrity": "sha512-35ZhAeYxWK3bTqqgwysbBWlGlrlMNKNng3ZITQV2PAtafpE7aCeqywl7VAS4lLRG5eTb7wxNgN7zf8d3wiIFTQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-s390x": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-s390x/-/wizer-linux-s390x-3.0.1.tgz", + "integrity": "sha512-Smvy9mguEMtX0lupDLTPshXUzAHeOhgscr1bhGNjeCCLD1sd8rIjBvWV19Wtra0BL1zTuU2EPOHjR/4k8WoyDg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-s390x": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-x64": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-x64/-/wizer-linux-x64-3.0.1.tgz", + "integrity": "sha512-uUue78xl7iwndsGgTsagHLTLyLBVHhwzuywiwHt1xw8y0X0O8REKRLBoB7+LdM+pttDPdFtKJgbTFL4UPAA7Yw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-win32-x64": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-win32-x64/-/wizer-win32-x64-3.0.1.tgz", + "integrity": "sha512-ycd38sx1UTZpHZwh8IfH/4N3n0OQUB8awxkUSLXf9PolEd088YbxoPB3noHy4E+L2oYN7KZMrg9517pX0z2RhQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "wizer-win32-x64": "wizer" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binaryen": { + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-111.0.0.tgz", + "integrity": "sha512-PEXOSHFO85aj1aP4t+KGzvxQ00qXbjCysWlsDjlGkP1e9owNiYdpEkLej21Ax8LDD7xJ01rEmJDqZ/JPoW2GXw==", + "bin": { + "wasm-opt": "bin/wasm-opt", + "wasm2js": "bin/wasm2js" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", + "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + } + } +} diff --git a/experiments/wasm/guest-js/package.json b/experiments/wasm/guest-js/package.json new file mode 100644 index 0000000..a1f4f45 --- /dev/null +++ b/experiments/wasm/guest-js/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "@bytecodealliance/componentize-js": "^0.7.1", + "@bytecodealliance/jco": "^1.0.2" + } +} diff --git a/experiments/wasm/guest-py/component.wit b/experiments/wasm/guest-py/component.wit new file mode 100644 index 0000000..78eed92 --- /dev/null +++ b/experiments/wasm/guest-py/component.wit @@ -0,0 +1,5 @@ +package pkg:component; +world component { + export print: func(input: string); + export hello: func() -> string; +} diff --git a/experiments/wasm/guest-py/component/__init__.py b/experiments/wasm/guest-py/component/__init__.py new file mode 100644 index 0000000..513766d --- /dev/null +++ b/experiments/wasm/guest-py/component/__init__.py @@ -0,0 +1,16 @@ +from typing import TypeVar, Generic, Union, Optional, Union, Protocol, Tuple, List, Any, Self +from enum import Flag, Enum, auto +from dataclasses import dataclass +from abc import abstractmethod +import weakref + +from .types import Result, Ok, Err, Some + + + +class Component(Protocol): + + @abstractmethod + def hello(self) -> str: + raise NotImplementedError + diff --git a/experiments/wasm/guest-py/component/types.py b/experiments/wasm/guest-py/component/types.py new file mode 100644 index 0000000..76d9707 --- /dev/null +++ b/experiments/wasm/guest-py/component/types.py @@ -0,0 +1,24 @@ +from typing import TypeVar, Generic, Union, Optional, Union, Protocol, Tuple, List, Any, Self +from enum import Flag, Enum, auto +from dataclasses import dataclass +from abc import abstractmethod +import weakref + + +S = TypeVar('S') +@dataclass +class Some(Generic[S]): + value: S + +T = TypeVar('T') +@dataclass +class Ok(Generic[T]): + value: T + +E = TypeVar('E') +@dataclass(frozen=True) +class Err(Generic[E], Exception): + value: E + +Result = Union[Ok[T], Err[E]] + \ No newline at end of file diff --git a/experiments/wasm/guest-py/lib.py b/experiments/wasm/guest-py/lib.py new file mode 100644 index 0000000..063af6b --- /dev/null +++ b/experiments/wasm/guest-py/lib.py @@ -0,0 +1,9 @@ +import component + + +class Component(component.Component): + def print(self) -> None: + print("Hello, World!") + + def hello(self) -> str: + return "Hello, World!" diff --git a/experiments/wasm/guest-rs/.cargo/config.toml b/experiments/wasm/guest-rs/.cargo/config.toml new file mode 100644 index 0000000..f4e8c00 --- /dev/null +++ b/experiments/wasm/guest-rs/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +target = "wasm32-unknown-unknown" diff --git a/experiments/wasm/guest-rs/.vscode/settings.json b/experiments/wasm/guest-rs/.vscode/settings.json new file mode 100644 index 0000000..b945667 --- /dev/null +++ b/experiments/wasm/guest-rs/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "rust-analyzer.check.overrideCommand": [ + "cargo", + "component", + "check", + "--workspace", + "--all-targets", + "--message-format=json" + ], +} diff --git a/experiments/wasm/guest-rs/Cargo.lock b/experiments/wasm/guest-rs/Cargo.lock new file mode 100644 index 0000000..a9ec20f --- /dev/null +++ b/experiments/wasm/guest-rs/Cargo.lock @@ -0,0 +1,665 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "component" +version = "0.1.0" +dependencies = [ + "image", + "once_cell", + "regex", + "wit-bindgen", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "half" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "image" +version = "0.24.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +dependencies = [ + "rayon", +] + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "png" +version = "0.17.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c2378060fb13acff3ba0325b83442c1d2c44fbb76df481160ddc1687cce160" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.113" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "spdx" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bde1398b09b9f93fc2fc9b9da86e362693e999d3a54a8ac47a99a5a73f638b" +dependencies = [ + "smallvec", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "syn" +version = "2.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "wasm-encoder" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e3fb0c8fbddd78aa6095b850dfeedbc7506cf5f81e633f69cf8f2333ab84b9" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-metadata" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b8cc0c21f46d55b0aaa419cacce1eadcf28eaebd0e1488d6a6313ee71a586" +dependencies = [ + "anyhow", + "indexmap", + "serde", + "serde_derive", + "serde_json", + "spdx", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a03f65ac876612140c57ff6c3b8fe4990067cce97c2cfdb07368a3cc3354b062" +dependencies = [ + "bitflags 2.4.2", + "indexmap", + "semver", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "wit-bindgen" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7e88e9233b79107af0e3ac3ff9a38d21f1d59f14ac64188d76ff9d09563a9dc" +dependencies = [ + "bitflags 2.4.2", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "094be31faa586837d54ecda4e4d8f46a972b82c5c53b7856329576ec7f7fa337" +dependencies = [ + "anyhow", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99b9a8e449ca7afd08ff67a41c5c1491b4750fd60ce0e4d40c88e822bca1452e" +dependencies = [ + "anyhow", + "heck", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6697ff2eda7157805e2aec227fbedd51ccd4c09272575343b0ce5e89092cb2b6" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39979723340baea490b87b11b2abae05f149d86f2b55c18d41d78a2a2b284c16" +dependencies = [ + "anyhow", + "bitflags 2.4.2", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f717576b37f01c15696bda7f6f13868367b9c5913485f9f0ec8e59fd28c8e13" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] diff --git a/experiments/wasm/guest-rs/Cargo.toml b/experiments/wasm/guest-rs/Cargo.toml new file mode 100644 index 0000000..f9e82d6 --- /dev/null +++ b/experiments/wasm/guest-rs/Cargo.toml @@ -0,0 +1,15 @@ +[workspace] + +[package] +name = "component" +version = "0.1.0" +edition = "2021" + +[dependencies] +image = "0.24.8" +once_cell = "1.19.0" +regex = "1.10.3" +wit-bindgen = { version = "0.19.0", default-features = false, features = ["realloc", "macros"] } + +[lib] +crate-type = ["cdylib"] diff --git a/experiments/wasm/guest-rs/src/lib.rs b/experiments/wasm/guest-rs/src/lib.rs new file mode 100644 index 0000000..2e1d1fb --- /dev/null +++ b/experiments/wasm/guest-rs/src/lib.rs @@ -0,0 +1,71 @@ +pub struct Image(DynamicImage); + +wit_bindgen::generate!({ + world: "component", + exports: { + "intf": Component, + "intf/image": Image + }, +}); + +use exports::intf::Guest; +use image::DynamicImage; +use once_cell::sync::Lazy; +use regex::Regex; +use std::io::Cursor; +use wit_bindgen::Resource; + +struct Component; + +static REGEX: Lazy = + Lazy::new(|| Regex::new(r"[A-Za-z0-9-_.]+@[A-Za-z0-9-_.]+\.[A-Za-z0-9]{2,4}").unwrap()); + +impl Guest for Component { + fn print(input: String) { + println!("{}", input); + } + + fn hello() -> String { + println!("Hello from Rust (WASI TEST)!"); + "Hello from Rust!".to_owned() + } + + fn extract_emails(input: String) -> Vec { + REGEX + .find_iter(&input) + .map(|m| m.as_str().to_owned()) + .collect() + } + + fn load_image(bytes: Vec) -> Resource { + let img = Image(image::load_from_memory(&bytes).unwrap()); + let img = wit_bindgen::Resource::new(img); + img + } + + fn resize_image(this: &Image, width: u32, height: u32) -> Resource { + let img = this + .0 + .resize(width, height, image::imageops::FilterType::Lanczos3); + let img = wit_bindgen::Resource::new(Image(img)); + img + } + + fn image_to_bytes(this: &Image) -> Vec { + let mut buf = Vec::new(); + this.0 + .write_to(&mut Cursor::new(&mut buf), image::ImageOutputFormat::Png) + .unwrap(); + buf + } +} + +#[test] +fn test_extract_emails() { + let input = "john.doe@gmail.com and jane.doe@gmail.com".to_owned(); + let expected = vec![ + "john.doe@gmail.com".to_owned(), + "jane.doe@gmail.com".to_owned(), + ]; + assert_eq!(Component::extract_emails(input), expected); +} diff --git a/experiments/wasm/guest-rs/wit/component.wit b/experiments/wasm/guest-rs/wit/component.wit new file mode 100644 index 0000000..f58ebc0 --- /dev/null +++ b/experiments/wasm/guest-rs/wit/component.wit @@ -0,0 +1,12 @@ +package pkg:component; +world component { + export intf: interface { + resource image; + print: func(input: string); + hello: func() -> string; + load-image: func(bytes: list) -> image; + resize-image: func(self: borrow, width:u32, height:u32) -> image; + image-to-bytes: func(self: borrow) -> list; + extract-emails: func(input: string) -> list; + } +} diff --git a/experiments/wasm/host/Cargo.lock b/experiments/wasm/host/Cargo.lock new file mode 100644 index 0000000..ab16c7a --- /dev/null +++ b/experiments/wasm/host/Cargo.lock @@ -0,0 +1,2687 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cap-fs-ext" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e341d15ac1029aadce600be764a1a1edafe40e03cde23285bc1d261b3a4866" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "windows-sys 0.52.0", +] + +[[package]] +name = "cap-net-ext" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434168fe6533055f0f4204039abe3ff6d7db338ef46872a5fa39e9d5ad5ab7a9" +dependencies = [ + "cap-primitives", + "cap-std", + "rustix", + "smallvec", +] + +[[package]] +name = "cap-primitives" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe16767ed8eee6d3f1f00d6a7576b81c226ab917eb54b96e5f77a5216ef67abb" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes", + "ipnet", + "maybe-owned", + "rustix", + "windows-sys 0.52.0", + "winx", +] + +[[package]] +name = "cap-rand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e5695565f0cd7106bc3c7170323597540e772bb73e0be2cd2c662a0f8fa4ca" +dependencies = [ + "ambient-authority", + "rand", +] + +[[package]] +name = "cap-std" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "593db20e4c51f62d3284bae7ee718849c3214f93a3b94ea1899ad85ba119d330" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes", + "rustix", +] + +[[package]] +name = "cap-time-ext" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03261630f291f425430a36f38c847828265bc928f517cdd2004c56f4b02f002b" +dependencies = [ + "ambient-authority", + "cap-primitives", + "iana-time-zone", + "once_cell", + "rustix", + "winx", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a6391a9172a93f413370fa561c6bca786e06c89cf85f23f02f6345b1c8ee34" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409c6cbb326604a53ec47eb6341fc85128f24c81012a014b4c728ed24f6e9350" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown 0.14.3", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff55e100130995b9ad9ac6b03a24ed5da3c1a1261dcdeb8a7a0292656994fb3" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1446e2eb395fc7b3019a36dccb7eccea923f6caf581b903c8e7e751b6d214a7" + +[[package]] +name = "cranelift-control" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24076ecf69cbf8b9e1e532ae8e7ac01d850a1c2e127058a26eb3245f9d5b89d1" +dependencies = [ + "arbitrary", +] + +[[package]] +name = "cranelift-entity" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f40df95180ad317c60459bb90dd87803d35e538f4c54376d8b26c851f6f0a1b" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "cranelift-frontend" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c3974cc665b699b626742775dae1c1cdea5170f5028ab1f3eb61a7a9a6e2979" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99543f92b9c361f3c54a29e945adb5b9ef1318feaa5944453cabbfcb3c495919" + +[[package]] +name = "cranelift-native" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c0d84dc7d9b3f73ad565eacc4ab36525c407ef5150893b4b94d5f5f904eb48a" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.105.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53781039219944d59c6d3ec57e6cae31a1a33db71573a945d84ba6d875d0a743" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser 0.121.2", + "wasmtime-types", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fd-lock" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" +dependencies = [ + "cfg-if", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-set-times" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "033b337d725b97690d86893f9de22b67b80dcc4e9ad815f348254c38119db8fb" +dependencies = [ + "io-lifetimes", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "fxprof-processed-profile" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" +dependencies = [ + "bitflags 2.4.2", + "debugid", + "fxhash", + "serde", + "serde_json", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" + +[[package]] +name = "host" +version = "0.1.0" +dependencies = [ + "anyhow", + "reqwest", + "wasmtime", + "wasmtime-wasi", + "wit-component", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "io-extras" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c301e73fb90e8a29e600a9f402d095765f74310d582916a952f618836a1bd1ed" +dependencies = [ + "io-lifetimes", + "windows-sys 0.52.0", +] + +[[package]] +name = "io-lifetimes" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "ittapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b996fe614c41395cdaedf3cf408a9534851090959d90d54a535f675550b64b1" +dependencies = [ + "anyhow", + "ittapi-sys", + "log", +] + +[[package]] +name = "ittapi-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5385394064fa2c886205dba02598013ce83d3e92d33dbdc0c52fe0e7bf4fc" +dependencies = [ + "cc", +] + +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "crc32fast", + "hashbrown 0.14.3", + "indexmap", + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.4.2", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "itoa", + "libc", + "linux-raw-sys", + "once_cell", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.113" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spdx" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bde1398b09b9f93fc2fc9b9da86e362693e999d3a54a8ac47a99a5a73f638b" +dependencies = [ + "smallvec", +] + +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "syn" +version = "2.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-interface" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0682e006dd35771e392a6623ac180999a9a854b1d4a6c12fb2e804941c2b1f58" +dependencies = [ + "bitflags 2.4.2", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes", + "rustix", + "windows-sys 0.52.0", + "winx", +] + +[[package]] +name = "target-lexicon" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" + +[[package]] +name = "tempfile" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi-common" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "082a661fe31df4dbb34409f4835ad3d8ba65036bf74aaec9b21fde779978aba7" +dependencies = [ + "anyhow", + "bitflags 2.4.2", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "io-extras", + "io-lifetimes", + "log", + "once_cell", + "rustix", + "system-interface", + "thiserror", + "tracing", + "wasmtime", + "wiggle", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wasm-encoder" +version = "0.41.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "972f97a5d8318f908dded23594188a90bcd09365986b1163e66d70170e5287ae" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-encoder" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e3fb0c8fbddd78aa6095b850dfeedbc7506cf5f81e633f69cf8f2333ab84b9" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm-metadata" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b8cc0c21f46d55b0aaa419cacce1eadcf28eaebd0e1488d6a6313ee71a586" +dependencies = [ + "anyhow", + "indexmap", + "serde", + "serde_derive", + "serde_json", + "spdx", + "wasm-encoder 0.200.0", + "wasmparser 0.200.0", +] + +[[package]] +name = "wasmparser" +version = "0.121.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +dependencies = [ + "bitflags 2.4.2", + "indexmap", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a03f65ac876612140c57ff6c3b8fe4990067cce97c2cfdb07368a3cc3354b062" +dependencies = [ + "bitflags 2.4.2", + "indexmap", + "semver", +] + +[[package]] +name = "wasmprinter" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e73986a6b7fdfedb7c5bf9e7eb71135486507c8fbc4c0c42cffcb6532988b7" +dependencies = [ + "anyhow", + "wasmparser 0.121.2", +] + +[[package]] +name = "wasmtime" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06f80b13fdeba0ea5267813d0f06af822309f7125fc8db6094bcd485f0a4ae7" +dependencies = [ + "addr2line", + "anyhow", + "async-trait", + "bincode", + "bumpalo", + "cfg-if", + "encoding_rs", + "fxprof-processed-profile", + "gimli", + "indexmap", + "ittapi", + "libc", + "log", + "object", + "once_cell", + "paste", + "rayon", + "rustix", + "serde", + "serde_derive", + "serde_json", + "target-lexicon", + "wasm-encoder 0.41.2", + "wasmparser 0.121.2", + "wasmtime-cache", + "wasmtime-component-macro", + "wasmtime-component-util", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "wasmtime-winch", + "wat", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d7395b475c6f858c7edfce375f00d8282a32fbf5d1ebc93eddfac5c2458a52" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cache" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0a78f86b27f099bea3aaa0894464e22e84a08cadf3d8cd353378d3d15385535" +dependencies = [ + "anyhow", + "base64", + "bincode", + "directories-next", + "log", + "rustix", + "serde", + "serde_derive", + "sha2", + "toml", + "windows-sys 0.52.0", + "zstd", +] + +[[package]] +name = "wasmtime-component-macro" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e54483c542e304e17fa73d3f9263bf071e21915c8f048c7d42916da5b4bfd6" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser 0.13.2", +] + +[[package]] +name = "wasmtime-component-util" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9f72619f484df95fc03162cdef9cb98778abc4103811849501bb34e79a3aac" + +[[package]] +name = "wasmtime-cranelift" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "974d9455611e26c97d31705e19545de58fa8867416592bd93b7a54a7fc37cedb" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "object", + "target-lexicon", + "thiserror", + "wasmparser 0.121.2", + "wasmtime-cranelift-shared", + "wasmtime-environ", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40667ba458634db703aea3bd960e80bc9352c21d5e765b69f43e3b0c964eb611" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-control", + "cranelift-native", + "gimli", + "object", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8da991421528c2767053cb0cfa70b5d28279100dbcf70ed7f74b51abe1656ef" +dependencies = [ + "anyhow", + "bincode", + "cpp_demangle", + "cranelift-entity", + "gimli", + "indexmap", + "log", + "object", + "rustc-demangle", + "serde", + "serde_derive", + "target-lexicon", + "thiserror", + "wasm-encoder 0.41.2", + "wasmparser 0.121.2", + "wasmprinter", + "wasmtime-component-util", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fdd780272515bfcdf316e2efe20231719ec40223d67fcdd7d17068a16d39384" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "rustix", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87be9ed561dbe2aca3bde30d442c292fda53748343d0220873d1df65270c8fcf" +dependencies = [ + "object", + "once_cell", + "rustix", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3346431a41fbb0c5af0081c2322361b00289f2902e54ee7b115e9b2ad32b156b" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a489353aa297b46a66cde8da48cab8e1e967e7f4b0ae3d9889a0550bf274810b" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "encoding_rs", + "indexmap", + "libc", + "log", + "mach", + "memfd", + "memoffset", + "paste", + "psm", + "rustix", + "sptr", + "wasm-encoder 0.41.2", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "wasmtime-versioned-export-macros", + "wasmtime-wmemcheck", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-types" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12c56e31fd7fa707fbd7720b2b29ac42ccfb092fe9d85c98f1d3988f9a1d4558" +dependencies = [ + "cranelift-entity", + "serde", + "serde_derive", + "thiserror", + "wasmparser 0.121.2", +] + +[[package]] +name = "wasmtime-versioned-export-macros" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0300976c36a9427d184e3ecf7c121c2cb3f030844faf9fcb767821e9d4c382" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "wasmtime-wasi" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f7d9cfaf9f70e83a164f5d772e376fafa2d7b7b0ca2ef88f9bcaf8b2363a38b" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.4.2", + "bytes", + "cap-fs-ext", + "cap-net-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "futures", + "io-extras", + "io-lifetimes", + "log", + "once_cell", + "rustix", + "system-interface", + "thiserror", + "tokio", + "tracing", + "url", + "wasi-common", + "wasmtime", + "wiggle", + "windows-sys 0.52.0", +] + +[[package]] +name = "wasmtime-winch" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f773a904d2bd5ecd8ad095f4c965ad56a836929d8c26368621f75328d500649" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli", + "object", + "target-lexicon", + "wasmparser 0.121.2", + "wasmtime-cranelift-shared", + "wasmtime-environ", + "winch-codegen", +] + +[[package]] +name = "wasmtime-wit-bindgen" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e9754e0a526238ea66da9ba21965a54846a2b22d9de89a298fb8998389507" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "wit-parser 0.13.2", +] + +[[package]] +name = "wasmtime-wmemcheck" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdf5b8da6ebf7549dad0cd32ca4a3a0461449ef4feec9d0d8450d8da9f51f9b" + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + +[[package]] +name = "wast" +version = "200.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1810d14e6b03ebb8fb05eef4009ad5749c989b65197d83bce7de7172ed91366" +dependencies = [ + "bumpalo", + "leb128", + "memchr", + "unicode-width", + "wasm-encoder 0.200.0", +] + +[[package]] +name = "wat" +version = "1.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "776cbd10e217f83869beaa3f40e312bb9e91d5eee29bbf6f560db1261b6a4c3d" +dependencies = [ + "wast 200.0.0", +] + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wiggle" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "454570f4fecadb881f0ba157e98b575a2850607a9eac79d8868f3ab70633f632" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.4.2", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443ac1ebb753ca22bca98d01742762de1243ff722839907c35ea683a8264c74e" +dependencies = [ + "anyhow", + "heck", + "proc-macro2", + "quote", + "shellexpand", + "syn", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "18.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9e2f1f06ae07bac15273774782c04ab14e9adfbf414762fc84dbbfcf7fb1ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wiggle-generate", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winch-codegen" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f7eaac56988f986181099c15860946fea93ed826322a1f92c4ff04541b7744" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli", + "regalloc2", + "smallvec", + "target-lexicon", + "wasmparser 0.121.2", + "wasmtime-environ", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winx" +version = "0.36.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9643b83820c0cd246ecabe5fa454dd04ba4fa67996369466d0747472d337346" +dependencies = [ + "bitflags 2.4.2", + "windows-sys 0.52.0", +] + +[[package]] +name = "wit-component" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39979723340baea490b87b11b2abae05f149d86f2b55c18d41d78a2a2b284c16" +dependencies = [ + "anyhow", + "bitflags 2.4.2", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder 0.200.0", + "wasm-metadata", + "wasmparser 0.200.0", + "wit-parser 0.200.0", +] + +[[package]] +name = "wit-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "316b36a9f0005f5aa4b03c39bc3728d045df136f8c13a73b7db4510dec725e08" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "wit-parser" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f717576b37f01c15696bda7f6f13868367b9c5913485f9f0ec8e59fd28c8e13" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.200.0", +] + +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast 35.0.2", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/experiments/wasm/host/Cargo.toml b/experiments/wasm/host/Cargo.toml new file mode 100644 index 0000000..291e808 --- /dev/null +++ b/experiments/wasm/host/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] + +[package] +name = "host" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.79" +wasmtime = { version = "18.0.1", features = ["component-model"] } +wit-component = "0.200.0" +wasmtime-wasi = "18.0.1" +reqwest = { version = "0.11.24", features = ["blocking"] } diff --git a/experiments/wasm/host/build.rs b/experiments/wasm/host/build.rs new file mode 100644 index 0000000..6c5ca93 --- /dev/null +++ b/experiments/wasm/host/build.rs @@ -0,0 +1,99 @@ +use std::env; +use std::process::Command; + +fn main() { + rs(); + py(); + js(); +} + +fn rs() { + let guest_rs = env::current_dir() + .unwrap() + .parent() + .unwrap() + .join("guest-rs"); + + let status = Command::new("cargo") + .current_dir(&guest_rs) + .arg("build") + .arg("--release") + .arg("--target") + .arg("wasm32-unknown-unknown") + .status() + .unwrap(); + + if !status.success() { + panic!("Failed to build {}", guest_rs.display()); + } + + let status = Command::new("cargo") + .current_dir(&guest_rs) + .arg("build") + .arg("--release") + .arg("--target") + .arg("wasm32-wasi") + .status() + .unwrap(); + + if !status.success() { + panic!("Failed to build {}", guest_rs.display()); + } + + println!("cargo:rerun-if-changed={}", guest_rs.display()); +} + +fn py() { + let guest_py = env::current_dir() + .unwrap() + .parent() + .unwrap() + .join("guest-py"); + + let status = Command::new("componentize-py") + .current_dir(&guest_py) + .arg("-d") + .arg("component.wit") + .arg("-w") + .arg("component") + .arg("componentize") + .arg("lib") + .arg("-o") + .arg("component.wasm") + .status() + .unwrap(); + + if !status.success() { + panic!("Failed to build {}", guest_py.display()); + } + + println!("cargo:rerun-if-changed={}", guest_py.display()); +} + +fn js() { + let guest_js = env::current_dir() + .unwrap() + .parent() + .unwrap() + .join("guest-js"); + + println!("cargo:rerun-if-changed={}", guest_js.display()); + + let status = Command::new("npx") + .current_dir(&guest_js) + .arg("jco") + .arg("componentize") + .arg("lib.js") + .arg("--wit") + .arg("component.wit") + .arg("-n") + .arg("component") + .arg("-o") + .arg("component.wasm") + .status() + .unwrap(); + + if !status.success() { + panic!("Failed to build {}", guest_js.display()); + } +} diff --git a/experiments/wasm/host/cat.png b/experiments/wasm/host/cat.png new file mode 100644 index 0000000..77ef3a9 Binary files /dev/null and b/experiments/wasm/host/cat.png differ diff --git a/experiments/wasm/host/cat_resized.png b/experiments/wasm/host/cat_resized.png new file mode 100644 index 0000000..7cd4787 Binary files /dev/null and b/experiments/wasm/host/cat_resized.png differ diff --git a/experiments/wasm/host/src/lib.rs b/experiments/wasm/host/src/lib.rs new file mode 100644 index 0000000..a341297 --- /dev/null +++ b/experiments/wasm/host/src/lib.rs @@ -0,0 +1,216 @@ +#[cfg(test)] +mod wasm_test { + use wasmtime::component::Component; + use wasmtime::component::Linker; + use wasmtime::component::ResourceAny; + use wasmtime::component::Val; + use wasmtime::Config; + use wasmtime::Engine; + use wasmtime::Store; + use wit_component::ComponentEncoder; + + const GUEST_RS_WASM_MODULE: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../guest-rs/target/wasm32-unknown-unknown/release/component.wasm" + )); + + const IMAGE: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/cat.png")); + + #[test] + fn test_rs_guest() -> anyhow::Result<()> { + let config = Config::new(); + let engine = Engine::new(&config)?; + let mut store = Store::new(&engine, ()); + let linker = Linker::new(&engine); + + let component = ComponentEncoder::default() + .module(GUEST_RS_WASM_MODULE)? + .validate(true) + .encode()?; + let component = Component::from_binary(&engine, &component)?; + + // Instantiate the component and extract its functions + let instance = linker.instantiate(&mut store, &component)?; + let mut exports = instance.exports(&mut store); + let mut intf = exports.instance("intf").unwrap(); + + let f0 = intf.func("extract-emails").unwrap(); + let f1 = intf.typed_func::<(String,), (Vec,)>("extract-emails")?; + let f2 = intf.typed_func::<(Vec,), (ResourceAny,)>("load-image")?; + let f3 = intf.typed_func::<(ResourceAny, u32, u32), (ResourceAny,)>("resize-image")?; + let f4 = intf.typed_func::<(ResourceAny,), (Vec,)>("image-to-bytes")?; + drop(exports); + + // Dynamic call + let emails0 = { + let inputs = &[Val::String( + "Hello my name is John Doe, my email is john.doe@gmail.com + I also have another email: john.doe@icloud.com + My friend's email is jane.doe@hotmail.com" + .to_owned() + .into_boxed_str(), + )]; + let outputs = &mut [Val::Bool(false)]; + + f0.call(&mut store, inputs, outputs)?; + f0.post_return(&mut store)?; + + let Val::List(l) = &outputs.get(0).unwrap() else { + panic!("unexpected type") + }; + + l.iter() + .map(|v| { + let Val::String(s) = v else { + panic!("unexpected type") + }; + s.to_string() + }) + .collect::>() + }; + + // Static call + let (emails1,) = f1.call( + &mut store, + ("Hello my name is John Doe, my email is john.doe@gmail.com + I also have another email: john.doe@icloud.com + My friend's email is jane.doe@hotmail.com" + .to_owned(),), + )?; + f1.post_return(&mut store)?; + + assert_eq!(emails0, emails1); + + // Opaque data types (resources) + let (img,) = f2.call(&mut store, (IMAGE.to_vec(),))?; + f2.post_return(&mut store)?; + let (img,) = f3.call(&mut store, (img, 100, 100))?; + f3.post_return(&mut store)?; + let (bytes,) = f4.call(&mut store, (img,))?; + f4.post_return(&mut store)?; + + std::fs::write( + concat!(env!("CARGO_MANIFEST_DIR"), "/cat_resized.png"), + bytes, + )?; + + println!("Image resized and saved to cat_resized.png"); + + Ok(()) + } +} + +#[cfg(test)] +mod wasm_wasi_test { + use wasmtime::component::Component; + use wasmtime::component::Linker; + use wasmtime::component::ResourceTable; + use wasmtime::Config; + use wasmtime::Engine; + use wasmtime::Store; + use wit_component::ComponentEncoder; + + const GUEST_RS_WASI_MODULE: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../guest-rs/target/wasm32-wasi/release/component.wasm" + )); + + const GUEST_PY_WASI_COMPONENT: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../guest-py/component.wasm" + )); + + const GUEST_JS_WASI_COMPONENT: &[u8] = include_bytes!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../guest-js/component.wasm" + )); + + const ADAPTER_URL: &str = "https://github.com/bytecodealliance/wasmtime/releases\ + /download/v17.0.1/wasi_snapshot_preview1.reactor.wasm"; + + struct Host { + ctx: wasmtime_wasi::preview2::WasiCtx, + table: ResourceTable, + } + + impl wasmtime_wasi::preview2::WasiView for Host { + fn table(&mut self) -> &mut ResourceTable { + &mut self.table + } + + fn ctx(&mut self) -> &mut wasmtime_wasi::preview2::WasiCtx { + &mut self.ctx + } + } + + impl Host { + fn new() -> Self { + let ctx = wasmtime_wasi::preview2::WasiCtxBuilder::new() + .inherit_stdio() + .build(); + let table = ResourceTable::new(); + Self { ctx, table } + } + } + + #[test] + fn test_rs_guest() -> anyhow::Result<()> { + let config = Config::new(); + let engine = Engine::new(&config)?; + let host = Host::new(); + let mut store = Store::new(&engine, host); + let mut linker = Linker::new(&engine); + wasmtime_wasi::preview2::command::sync::add_to_linker::(&mut linker)?; + + let component = ComponentEncoder::default() + .module(GUEST_RS_WASI_MODULE)? + .adapter( + "wasi_snapshot_preview1", + &reqwest::blocking::get(ADAPTER_URL)?.bytes()?, + )? + .validate(true) + .encode()?; + let component = Component::from_binary(&engine, &component)?; + let instance = linker.instantiate(&mut store, &component)?; + let mut exports = instance.exports(&mut store); + let mut intf = exports.instance("intf").unwrap(); + let f1 = intf.typed_func::<(String,), ()>("print")?; + drop(exports); + let () = f1.call(&mut store, ("Hello world".to_string(),))?; + f1.post_return(&mut store)?; + Ok(()) + } + + #[test] + fn test_py_guest() -> anyhow::Result<()> { + let config = Config::new(); + let engine = Engine::new(&config)?; + let host = Host::new(); + let mut store = Store::new(&engine, host); + let mut linker = Linker::new(&engine); + wasmtime_wasi::preview2::command::sync::add_to_linker::(&mut linker)?; + + let component = Component::from_binary(&engine, &GUEST_PY_WASI_COMPONENT)?; + let instance = linker.instantiate(&mut store, &component)?; + let f1 = instance.get_typed_func::<(String,), ()>(&mut store, "print")?; + let () = f1.call(&mut store, ("Hello world".to_string(),))?; + f1.post_return(&mut store)?; + Ok(()) + } + + #[test] + fn test_js_guest() -> anyhow::Result<()> { + let config = Config::new(); + let engine = Engine::new(&config)?; + let host = Host::new(); + let mut store = Store::new(&engine, host); + let mut linker = Linker::new(&engine); + wasmtime_wasi::preview2::command::sync::add_to_linker::(&mut linker)?; + + let component = Component::from_binary(&engine, &GUEST_JS_WASI_COMPONENT)?; + let instance = linker.instantiate(&mut store, &component)?; + let f1 = instance.get_typed_func::<(String,), ()>(&mut store, "print")?; + let () = f1.call(&mut store, ("Hello world".to_string(),))?; + Ok(()) + } +}